二叉樹的後序遍歷序列

題目:
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。

思路:
其實這道題和我們經常說的求二叉樹的後序遍歷序列不一樣,大家一定要看清題意再做。二叉搜索樹的特點是左子樹比根結點小,右子樹比根結點大。後序遍歷最後一個元素是根結點,根結點左邊的元素都比根結點小,根結點右邊的元素都比根結點大。

發現一個後序遍歷的規律,根結點的左子樹中元素都比根結點的小,根結點的右子樹都比根結點的大。所以,定義一個變量,先遍歷,遇到小於根節點的加1,直到遇到大於根結點的,繼續加1,最後比較該變量與size,小的話就返回false。如果相等的話,繼續比較。判斷其他子樹是否爲二叉搜索樹。

class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        int size = sequence.size();
        if(size == 0)
            return false;

        while(--size){
            int i=0;
            while(sequence[i]<sequence[size])
                i++;
            while(sequence[i]>sequence[size])
                i++;
            if(i<size)
                return false;
        }
        return true;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章