安全プランを証明する:以降のバイナリ検索ツリートラバーサルシーケンス(Javaの)

タイトル:整数配列を入力し、配列が先行順走査結果のバイナリ検索ツリーの後にないと判断されます。それはそうでない場合はfalse、trueを返す場合。任意の2つの数の入力配列が異なっていると仮定する。

    }後続のバイナリ検索ツリートラバーサルの片のない結果が存在しないので、{入力配列{7,4,6​​,5である場合、例えば5,7,6,9,11,10,8入力アレイは、trueを返し}このシーケンスは、それゆえ、falseです。

   配列先行予約得られたが、最後の番号は、ツリーのルートノードの値です。アレイ内の前の数字は、二つの部分に分けることができる:最初の部分は、ノードの左の部分木、それらの小さな値よりもルートノードの値であり、第二の部分は、ノードの右の部分木の値であり、それらの値よりもルートノード大規模な。

    {} 5,7,6,9,11,10,8アレイは、例えば、結果後順8の最後の桁は、ルートノードの値です。この配列において、最初の3つの数字6,7,8、ノード8の値は、左の部分木のノードであるよりも小さい、8,9、11及び大10よりも3桁の値であります右部分木のノードノード8。

    我々は、次の配列と同じ方法の各部分に対応するサブツリーの構造を決定しました。実際には、これは再帰的なプロセスです。配列5,7,6のために、6最後の番号はルートノードの左の部分木の値です。図7は、右の子ノードである図5〜6時間、6は、ノードの左の子ノードの値です。同様に、配列9,11,10において、最後の数字10は10に、ルートノード、小さな数字9の右の部分木であり、11は右の子である間、ノード10は、左の子ノードの値でありますノード。

    私たちは別の配列{7,4,6​​,5}を分析してみましょう。後順最後ツリーはルートノードであるので、ルートノード5の値は、最初の数は7 5より大きいので、このようにして、対応する二分探索木、なし左サブツリーのルートノード、7つのフィギュア、値4、及び図6は、右の部分木のノードです。しかし、我々は5は、バイナリ検索ツリーの定義に反して、右のサブツリーのルートノードの値よりも小さい場合、ノードの値が4で発見しました。だから、二分探索木は、結果のその帰りがけ順が7,4,6​​,5で、何もありません。

 public boolean verifySequenceOfBST(int[] array,int start,int end) throws Exception{  
        if(array == null||array.length<=0)  
            return false;  
       if(start < 0){  
            throw  new Exception("first can't be less than 0");  
        }  
        if(end > array.length){  
            throw new Exception("last can't be greater than the count of the element.");  
        }  
        int root = array[end];  
        //在二叉搜索树中左子树的结点小于根节点  
        int i = start;  
        for(; i < end;i++){  
            if(array[i]>root)  
                break;  
        }  
        //在二叉搜索树中右子树的结点大于根节点  
        int j = i;  
        for(;j < end;j++){  
            if(array[j] < root)  
                return false;  
        }  
        //判断左子树是不是二叉搜索树  
        boolean left = true;  
        if(i >start)  
            left =verifySequenceOfBST(array ,start,i-1);  
        //判断右子树是不是二叉搜索树  
        boolean right = true;  
        if(i < end)  
            right =verifySequenceOfBST(array,i,end-1);  
        return (left && right);  
    }  


发布了118 篇原创文章 · 获赞 35 · 访问量 12万+

おすすめ

転載: blog.csdn.net/abc7845129630/article/details/52729262
おすすめ