質問

ンには敵地での日本像に磨きをかけ私のバイナリーツリーキための分岐ツリーに Wikipedia:樹皮.

一ん少なくなってきているのにつきましては当社は一挿入出来ます。

う:

まず、検索xの分岐ます。の場合、xが存在しないしないで、その親ノード。第二に、をは分岐の操作る移yプロジェクトの分岐ます。第三に、我々は、新しいノードはxとしてのルートに適します。ここからyが左または右の子が新しいルート。

私の質問は、この:上記のテキストのように過度に比べてエッセイは英語で書、その他の事例は、この理由は何でしょうか?そうであgotchasを残していくという。例えば、溶射のyノードのルートできるようになっ盲目的に置換ルートのx、タックyをx、左または右ます。

このような価値が存在していないのです。

私はこのツリー:

           10
          /  \
         5    15
        / \    \
       1   6    20

たい挿入8.は、上記まに見かけることの6-ノード、通常のバイナリーツリー8ば追加を行うことが必要となります。子の6つのノードがここにいて分岐6つのノードをルート:

            6
           / \
          5   10
         /     \
        1       15
                 \
                  20

次のいずれかの条件が成立することは十思っていたが、あるきっかけで

          8                                  8
           \                                /
            6                              6
           / \                            / \
          5   10                         5   10
         /     \                        /     \
        1       15                     1       15
                 \                              \
                  20                             20

    6 is not greater than 8          10 is not less than 8

そのための唯一の方法は、溶射後、正常に新しい価値としてルートを意味していますの確認は、以下の基準(追加のsplayedノードの左の子を新しいルート):

  1. のノードかsplayedのルートは以下の新しいルート(6 < 8)
  2. 一番右の子ノードかsplayedのルートは以下の新しいルート(20 8)

しかし、または分割、ノードかsplayed、右の子および追加して右の子の新しいノードは、この:

                        8
                       / \
                      6   10
                     /     \
                    5       15
                   /         \
                  1           20

しかし、これで簡単な変更を常に行くという正しいツリー?私ならば、この

  • の新たな価値を付け加えておきたいの仮根のノードかsplayedのルートがより一番左の子どもの権利子の仮根?

ります。ツリーが基本的には、このようにな後、溶射、その前に私のルート?

                        10
                       /  \
                      5    15
                          /  \
                        11    20

と付け加えておきたい13、ということは、新しいツリーのようになります:

                        13
                       /  \
                     10    15
                     /    /  \
                    5   11    20  <-- 11, on the wrong side of 13

はできないこ失業が生まれるのでしょうか。

私の第二の質問は、この:ができるのではないはずっと楽になりそうで書き換えオペレーションを実施。

まず、検索xの分岐ます。の場合、xが存在しないしないで、その親ノード。 その後を追加しましたの新しいノードとしては左または右に子どもの親ノードです。 その結果、思い出しを行う分岐の操作 ノードを追加しまし を移動するので新しい価値の根分岐ます。

重鉱山かたを変更します。

役に立ちましたか?

解決

私はあなたが記述問題が発生する可能性がどのように表示されません。

:あなたはこのツリーに13を挿入したい場合は、まずそれがだろう場所を見つけなければなりません
                    10
                   /  \
                  5    15
                      /  \
                    11    20

10からは、11からあなたが右に行く...そしてあなたはそれ以上の要素を持っていない、あなたが左に行く15から、右に行きます。 13ツリーにあった場合、我々は11の右の子としてそれを見つけただろうだから、ルールに従って、我々はスプレー木の根元に11を移動させるであろう11のスプレイ操作を実行します:

                    11
                   /  \
                  10   15
                 /       \
                5         20

その後、我々は左の子のように11で、新しいルートとして13を追加します:

                    13
                   /  \
                  11   15
                 /       \
                10        20
               /
              5

これで問題ありません。

  

まず、スプレー木のXを検索します。 xが存在しない場合、我々はそれが、その親ノードyを見つけることができません。その後、我々は、親ノードの左または右の子のいずれかのように、新しいノードを追加します。第三に、我々は、スプレー木のルートに新しい値を移動します、我々は追加したノード上でスプレイ操作を実行します。

それはあまりにもうまくいくようにこれは私に聞こえるが、私があなただったら、私は多くの人々がそれをテストしてきたし、それはすでに十分に立証されているので、それはウィキペディアに記載されたバージョンを実装しようと思います。

他のヒント

"分岐木"直感覚記CUJを読み込みますが、いつもコメントありがとうございます 実施分岐ツリーのC++.

第三に、我々は、新しいノードはxとしてのルートに適します。ここからyが左または右の子が新しいルート。

ただし、この新しいルートx2、子どもだからこの文章が混乱している。

新しいノードは、通常のバイナリ検索ツリーのようなツリーに追加されます。次いで、新しいノードは、ルートまたはルートから最初のレベルにまで広がったことになります。私たちは、新しいノードを挿入するときにも、我々はそれを置くための場所を見つける必要があるので、我々は検索を行います。そして、スプレー木上の検索など、すべての操作は、スプレイ操作をトリガーします。 Wikipediaの記事はそのようにそれを説明し、なぜthatsのかもしれません。私はちょうど新しいノードを挿入し、それをスプレイ。どちらにしても木はそれがあったより良いバランスになります。ここでのの作品>

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top