劍指offer刷題 二叉搜索樹的後序遍歷序列

題意
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。
如果是則返回true,否則返回false。
假設輸入的數組的任意兩個數字都互不相同。
樣例
輸入:[4, 8, 6, 12, 16, 14, 10]
輸出:true
思路注意這裏是二叉搜索樹的後序遍歷所以根結點一定在後面最後一個元素,思路和二叉樹的重建是一樣的
在後序遍歷的數組中找到左子樹的區間和右子樹的區間

class Solution {
public:
    vector<int> sequence;
    bool dfs(int l,int r)
    {
        if(l>=r) return true;
        int root=sequence[r];
        int k;
        for( k=0;sequence[k]<root;) k++;//找到左子樹的區間
        for(int j=k+1;j<r;j++) //如果在右子樹中找到了比根節點小的元素就直接返回false
        {
            if(sequence[j]<=root)
            return false;
        }
        return dfs(l,k-1)&&dfs(k,r-1);
    }
    bool verifySequenceOfBST(vector<int> _sequence) {
        sequence=_sequence;
        return dfs(0,sequence.size()-1);
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章