判斷該數組是不是某二叉搜索樹的後序遍歷的結果


/**
 * @Author JH
 * @CreateDate 18-6-9
 * @Description
 */

public class VerifySquenceOfBST {
    //方法一
    public boolean VerifySquenceOfBST(int [] sequence) {
        if (sequence==null||sequence.length==0)return false;
        if (fun(sequence,0,sequence.length-1)!=null)return true;
        return false;
    }
    public TreeNode fun(int []sequence,int st,int ed){
        if (ed==-1)return null;//沒有右子樹了
        if (st==ed)return new TreeNode(sequence[st]);
        TreeNode root=new TreeNode(sequence[ed]);
        for(int i=st;i<ed;i++){
            if (sequence[i]<sequence[ed]);
            else{//判斷右子樹的值是不是都大於根節點
                for (int j=i+1;j<ed;j++){
                    if (sequence[j]<sequence[ed]){
                        return null;
                    }
                }
                root.left=fun(sequence,st,i-1);
                root.right=fun(sequence,i,ed-1);
            }
        }
        return root;
    }
    //方法二
    public boolean VerifySquenceOfBST_1(int [] sequence ,int st ,int length) {
        if (sequence==null||length<=0)return false;
        int root=sequence[length-1];
        int i=st;
        //尋找左子樹的範圍(0,i-1)
        for (;i<length;i++){
            if (sequence[i]>=root){
                break;
            }
        }
        //驗證右子樹的數字是不是都大於根節點
        for (int j=i+1;j<length;j++){
            if (sequence[j]<root)return false;
        }
        //有右子樹
        boolean left=true;
        if (i>st){
            left=VerifySquenceOfBST_1(sequence,st,i);
        }
        //有左子樹
        boolean right=true;
        if (i<length-1){
            right=VerifySquenceOfBST_1(sequence,i,length-i-1);
        }
        return left&&right;
    }
    public static void main(String[] args) {
        VerifySquenceOfBST v=new VerifySquenceOfBST();
        int [] se={5,7,6,9,11,10,8};
        int [] ss={4,8,6,12,16,14,10};
        int s[]={5,4,3,2,1};
        int[] a={7,4,6,5};
       // System.out.println(v.VerifySquenceOfBST(se));
        //System.out.println(v.VerifySquenceOfBST(ss));
        //System.out.println(v.VerifySquenceOfBST(s));
        System.out.println(v.VerifySquenceOfBST_1(s,0,s.length));
        System.out.println(v.VerifySquenceOfBST_1(a,0,a.length));
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章