題目描述
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的后序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0){
return false;
}
return VerifySquenceOfBST(sequence, 0, sequence.length-1);
}
public boolean VerifySquenceOfBST(int [] sequence, int start, int end) {
if(start==end){
return true;
}
//后序遍歷,最后一個元素是根
int root = sequence[end];
//左子樹都小于root
int i=start;
while(sequence[i]<root&&i<end){
i++;
}
//沒有右子樹
if(i==end){
return VerifySquenceOfBST(sequence,start,i-1);
}
//右子樹都大于root,如果不滿足,則返回false
for(int j=i; j<end; j++){
if(sequence[j]<root){
return false;
}
}
//沒有左子樹
if(i==start){
return VerifySquenceOfBST(sequence,i,end-1);
}
//遞歸檢查左、右子樹
return VerifySquenceOfBST(sequence,start,i-1)
&& VerifySquenceOfBST(sequence,i,end);
}
}