劍指Offer面試題33二叉搜尋樹的後序遍歷序列java版
阿新 • • 發佈:2018-12-24
題目:輸入一個整數陣列,判斷該陣列是不是某二叉搜尋樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的陣列的任意兩個數字都互不相同。
分析:在後序遍歷序列中,最後一個數字是樹的根節點的值。陣列中前面的數字可以分為兩部分:第一部分是左子樹節點的值,它們都比根節點的值小;第二部分是右子樹節點的值,它們都比根節點的值大。
所以先取陣列中最後一個數,作為根節點。然後從陣列開始計數比根節點小的數,並將這些記作左子樹,然後判斷後序的樹是否比根節點大,如果有點不滿足,則跳出,並判斷為不成立。全滿足的話,依次對左子樹和右子樹遞迴判斷。
程式碼:
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence==null||sequence.length<=0) return false;
return verifySquenceOfBST(sequence,0,sequence.length-1);
}
private boolean verifySquenceOfBST(int[] sequence,int start,int end){
if(start>=end) return true ;
int root=sequence[end];
int i=start;
while(sequence[i]<root){
i++;
}
int j=i;
while(j<end){
if(sequence[j]<root){
return false;
}
j++;
}
boolean left=verifySquenceOfBST(sequence,start,i-1 );
boolean right=verifySquenceOfBST(sequence,i,end-1);
return left&&right;
}
}