輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0){
return false;
}
return judge(sequence,0,sequence.length-1);
}
public boolean judge(int [] a,int start,int last){
if(start>=last){
return true;
}
//後序遍歷,最後的一個位置元素即是根節點
int i = last;
//找到的i即是分割左子樹與右子樹的位置。i-1的位置到start爲左子樹,i到last-1位置爲右子樹
//因爲二叉樹的左子樹的所有元素小於根節點的值,右子樹的所有元素的值大於根節點的值
//右子樹的值都大於根節點
while(i>start && a[i-1]>a[last]){
--i;
}
//左子樹的元素都需要小於根節點
for(int j=i-1;j>=start;--j){
if(a[j]>a[last]){
return false;
}
}
//在遞歸判斷左子樹與右子樹是否滿足後序遍歷
return (judge(a,start,i-1)) && (judge(a,i,last-1));
}
}