輸入一個整數數組,判斷該數組是否是某二叉搜索樹的後序遍歷的結果。若是是則輸出Yes,不然輸出No。假設輸入的數組的任意兩個數字都互不相同。

//二叉搜索樹條件左子樹<根<右子樹 //後序遍歷說明最後一個元素是該二叉樹的根節點 //1 找到該樹的左子樹 //2 判斷右子樹是否都大於根的值 //3 一樣操做,該根的左右子樹是否成立 public class Solution {code

public boolean VerifySquenceOfBST(int [] sequence) {

    if(sequence.length==0)
	
        return false;

    return juge(sequence,0,sequence.length-1);
	
    
    
}

public boolean juge(int a[],int start,int end){
   //說明該二叉搜索樹已經完成遍歷,沒發現錯誤的,該返回true
    if(start>=end)
	
        return true;
		
    int i;
	//找到該樹大於根節點的位置,也就是找到該樹的右子樹
    for(i=start;i<end;i++)
	
        if(a[i]>a[end])
           break;
    //判斷是否符合右子樹都大於根點的點,不,返回false,不然繼續判斷      
    for(int j=i;j<end;j++)
	
        if(a[j]<a[end])
		
            return false;
			
    //在一樣遍歷該根節點的左右子樹
   return juge(a,0,i-1) && juge(a,i,end-1);
   

}

}io

相關文章
相關標籤/搜索