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