題目描述
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
思路:
一個數組,如果是二叉搜索樹的後序序列,那麼根節點就是數組的最後一個
那麼數組的前一部分,就是左子樹(要麼爲空,要麼全部小於根節點),後一部分全是右子樹(要麼爲空,要麼全部大於根節點)
只有一種情況是非法的,如4,2,3就不可能是,從4開始就表示只能全是右子樹,但是2的出現破壞了這一規則
注意:
二叉樹不能爲空
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length ==0)
return false;
return SqueenceBST(sequence,0,sequence.length-1);
}
private boolean SqueenceBST(int[] sq,int startI,int endI){
if(endI -startI <2)
return true;
int jieduan =endI;
for(int i=startI;i<endI;i++){
if(sq[i] >sq[endI]){
jieduan=i;
break;
}
}
//if(jieduan ==startI-1)
for(int i=jieduan;i<endI;i++){
if(sq[i] <=sq[endI])
return false;
}
if(SqueenceBST(sq,startI,jieduan-1) == false)
return false;
if(SqueenceBST(sq,jieduan,endI-1) == false)
return false;
return true;
}
}