題目描述:
輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出Yes,否則輸出No。假設輸入的數組的任意兩個數字都互不相同。
思路:
二叉搜索樹是一個顆完全二叉樹,並且根節點大於或者等於左節點,小於或者等於右節點。二叉樹的後序遍歷是先左節點在右節點最後遍歷根節點。因此,數組的最後一個元素一定是根節點,並且數組前面(除了根節點)的部分一定是左邊小於根,右邊大於根節點,分別找出這兩部分,進行遞歸判斷即可。注意跳出遞歸的條件。
java 代碼
public class VerifySquenceOfBST {
public static boolean isSquenceOfBST(int [] a,int startId,int rootId){
if(a==null||a.length<=0){
return false;
}
if(startId<0||rootId<=0){
return true;
}
int fg1=0,fg2=0;
int i=rootId-1;
for(;i>=startId;i--){
if(a[i]<a[rootId]){ //第一個小於rootId的值
fg1=1;
break;
}
}
int j=i;
for(;j>=startId;j--){
if(a[j]>a[rootId]){ // 判斷是否有不小於a[rootId]的值
fg2=1;
break;
}
}
if(fg2==1){
return false;
}else{
return isSquenceOfBST(a,startId,i)&&isSquenceOfBST(a,i+1,rootId-1);
}
}
public static void main(String args[]){
int a[]={2,6,4,8,10,7};
System.out.println(VerifySquenceOfBST.isSquenceOfBST(a, 0, 5));
}
}