判斷二叉搜索樹的後序遍歷序列

  • 輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
  • 算法思想
    最後一個節點爲根結點,可將數組分成兩部分,左邊部分爲左樹,右邊部分爲右樹,進行遞歸循環,如果右樹含有比根結點小的數據就不是後序遍歷,否則爲正確的後序遍歷。
class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        if(sequence.size()==0)
            return false;
        return isBST(sequence,0,sequence.size()-1);
    }
    bool isBST(vector<int> vec,int start,int tail)
    {
        if(start>=tail)
            return true;
        int i = start ;
        while(i<tail&&vec[i]<vec[tail])  //左樹  也可以從右樹開始,則下面for循環則判斷左樹是否有比根結點大的
            i++;
        for(int j=i;j<tail;j++)  //尋找不符合規則的節點
            if(vec[j]<vec[tail])
                return false;
        return isBST(vec,start,i-1)&&isBST(vec,i,tail-1);
        
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章