劍指offer之面試題22:二叉搜索樹的後序遍歷序列

題目:
數組

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

思路:遞歸

BST的後序序列的合法序列是,對於一個序列S,最後一個元素是x (也就是根),若是去掉最後一個元素的序列爲T,那麼T知足:T能夠分紅兩段,前一段(左子樹)小於x,後一段(右子樹)大於x,且這兩段(子樹)都是合法的後序序列。完美的遞歸定義 : ) 。it

代碼:io

class Solution {
public:
         bool judge(vector<int>& a, int l, int r){
        if(l >= r) return true;
        int i = r;
        while(i > l && a[i - 1] > a[r])
            --i;
        for(int j = i - 1; j >= l; --j) 
            if(a[j] > a[r]) 
             return false;
        return judge(a, l, i - 1) && (judge(a, i, r - 1));
    }
    bool VerifySquenceOfBST(vector<int> a) {
        if(!a.size()) return false;
        return judge(a, 0, a.size() - 1);
    }
};
相關文章
相關標籤/搜索