オファー流暢勝利シリーズ - 二分探索木のシーケンス予約限定!

33が刻まれている。その後のバイナリ検索ツリートラバーサルシーケンス

一つ、タイトル説明

整数配列を入力して、アレイは、バイナリ検索ツリーをトラバースした後決意の結果ではありません。それはそうでない場合はfalse、trueを返す場合。任意の2つの数の入力配列が異なっていると仮定する。

例えば、入力配列5,7,6,9,11,10,8 {}は、図の先行結果でバイナリ検索ツリーの後に整数配列ので、trueを返し。
ここに画像を挿入説明

入力配列は{7,4,6​​,5}である場合、木のいずれので、配列のバイナリ検索ツリートラバーサル順序は、このようにfalseを返します。

第二に、問題分析

後順トラバーサル順序は次のとおりです。左のサブツリー - >右部分木 - >ルート(ルート最後トラバーサル)

二分探索木、ノードの左サブツリー<ルート値<ノードの右サブツリーの特性に基づいて値
ここに画像を挿入説明
アレイ} {5,7,6,9,11,10,8

上記のように、最後の番号の残りの数字をバイナリツリーのルートを通過した後、合わせたデジタルアレイと言うことができる、数が少ないルートノード(すなわち、左サブツリー部)が上面である、ルートノード(すなわち、右よりも数より大きくなりますサブツリー部分)バックです。

第三に、質問

  public boolean verifySquenceOfBST(int[] sequence) {
        if(sequence== null || sequence.length<=0) {
            return false;
        }
        return verifyCore(sequence, 0, sequence.length-1);
    }

    private boolean verifyCore(int[] sequence,int start,int end) {
        if(start >= end) {
            return true;
        }
        
        //判断左子树
        int mid=start;
        while(sequence[mid]<sequence[end]) {
            mid++;
        }

        //判断右子树
        for(int i=mid;i<end;i++) {
            if(sequence[i]<sequence[end]) {
                return false;
            }
        }
        return verifyCore(sequence, start, mid-1)&&verifyCore(sequence, mid, end-1);
    }
公開された152元の記事 ウォンの賞賛3198 ビュー45万+

おすすめ

転載: blog.csdn.net/qq_42322103/article/details/104096338