題目:
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出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;
}
};