判斷一個數組是否是某個二叉樹搜索樹的後序遍歷

題目描述:

輸入一個整數數組,判斷該數組是不是某二叉搜索樹的後序遍歷的結果。如果是則輸出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));
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章