バランスの取れたツリーの定義


100

誰かが私のためにバランスの取れた木の定義を明確にできるのではないかと思っています。私は、「各サブツリーのバランスが取れていて、2つのサブツリーの高さが最大で1だけ異なる場合、ツリーのバランスが取れていることを知っています。

これがばかげた質問である場合は申し訳ありませんが、この定義は、ツリーのリーフまでのすべてのノードに適用されますか、またはルートのすぐ外の左右のサブツリーにのみ適用されますか?これをフレーム化する別の方法は、ツリーの内部ノードが不均衡になり、ツリー全体が均衡を保つことができるのでしょうか?


6
コンプについて話していることを追加したかっただけです。サブツリーの科学的定義:ツリーTのサブツリーは、TのノードとTのすべての子孫で構成されるツリーです。通常の数学的な定義(それ自体がツリーであるツリーのサブグラフ)の場合、それは真ではありません。
TT_ 2013年

回答:


123

制約は通常、すべてのサブツリーに再帰的に適用されます。つまり、ツリーは次の場合にのみバランス調整されます。

  1. 左側と右側のサブツリーの高さが最大で1つ異なる、かつ
  2. 左側のサブツリーのバランスが取れている、かつ
  3. 正しいサブツリーはバランスが取れています

これによると、次の木はバランスが取れています:

     A
   /   \
  B     C  
 /     / \  
D     E   F  
     /  
    G  

Cのサブツリーは高さが2異なるため、次のものはバランスが取れていません

     A
   /   \
  B     C   <-- difference = 2
 /     /
D     E  
     /  
    G  

とはいえ、最初のポイントの特定の制約は、ツリーのタイプによって異なります。上記のものは、AVLツリーの一般的なものです。

たとえば、赤黒木は、よりソフトな制約を課します。


50

「バランス」を定義するにはいくつかの方法があります。主な目標は、すべてのノードの深度をに保つことO(log(n))です。

あなたが話していたバランス状態はAVLツリーのためのものであるように私には思えますAVLツリーのバランス条件の
正式な定義は次のとおりです。

AVLのノードの場合、左のサブツリーの高さは、右のサブツリーの高さと最大で 1だけ異なります。

次の質問、「身長」とは何ですか?

二分木のノードの「高さ」は、そのノードから葉までの最長経路の長さです。

奇妙で一般的なケースが1つあります。

人は空の木の高さをと定義します(-1)

たとえば、ルートの左の子はnull次のとおりです。

              A  (Height = 2)
           /     \
(height =-1)       B (Height = 1) <-- Unbalanced because 1-(-1)=2 >1
                    \
                     C (Height = 0)

決定するもう2つの例:

はい、バランスの取れたツリーの例:

        A (h=3)
     /     \
 B(h=1)     C (h=2)        
/          /   \
D (h=0)  E(h=0)  F (h=1)
               /
              G (h=0)

いいえ、バランスの取れたツリーの例でありません:

        A (h=3)
     /     \
 B(h=0)     C (h=2)        <-- Unbalanced: 2-0 =2 > 1
           /   \
        E(h=1)  F (h=0)
        /     \
      H (h=0)   G (h=0)      

1
この定義では、平衡型ツリーの非平衡型サブツリーが許可されることに注意してください。(たとえば、Dに子を追加し、Gに別の子を追加して、上記のバランスツリーの例を拡張します)これは意図されたものですか?
2016

2
いいえ、ありません。「AVLのどのノードでも、その左側のサブツリーの高さは、その右側のサブツリーの高さと最大で1だけ異なります。」Dに子を追加すると、Bは上記の規則に従いません。したがって、ツリーはBBTにはなりません。
ジョンレッド

1
あなたの答えは非常に冗長で正確ではありません
Marwen Trabelsi

9

これら2つの点に違いはありません。それについて考えてください。

より単純な定義を考えてみましょう。「正の数はゼロであっても、その数から2を引いた数も偶数です。」これは、6が偶数であっても8が偶数であると言いますか?それとも、6、4、2、および0が偶数であっても、8は偶数であると言えますか?

違いはありません。6が偶数であっても8が偶数である場合、4が偶数であっても6が偶数であることも示します。したがって、2が偶数であっても4が偶数であることも示します。したがって、0が偶数であっても、2は偶数であると表示されます。つまり、6が偶数であっても8が偶数であると言うと、6、4、2、0が偶数であっても8は(間接的に)偶数であると言えます。

ここでも同じです。間接サブツリーは、直接サブツリーのチェーンによって見つけることができます。したがって、直接サブツリーに直接適用されるだけでも、すべてのサブツリー(したがってすべてのノード)に間接的に適用されます。


1
ルートの値が15であるとしましょう。右下には、16、17、18があります。左下には14、13、12があります。それはバランスの取れた木ですか?ノードからの各サブツリーの高さは1以内です。しかし、ルートの下の最初のノードを右に移動します。左の子はありませんが、右の子の高さは2です。そのため、そのノードは平衡化されていません。あれは正しいですか?
マークソリック

1
正しい。したがって、ツリーはバランスが取れていません。
デビッドシュワルツ

1
したがって、ツリーのバランスをとるためには、すべてのノードのバランスをとる必要があります。美容-あなたの助けをありがとう。
マークソリック

1
@DavidSchwartzなぜバランスの取れたツリーを使用しようとしているのですか?なぜツリーのバランスが取れているかどうかを気にするのですか?
Dejell 2013年

3
これは断然、私がSOで見た中で最も複雑な答えです-どんな質問に対しても。申し訳ありません。
Trevor

4

バランスの取れたツリーは、高さがログ(ツリー内の要素の数)のオーダーであるツリーです。

height = O(log(n))
O, as in asymptotic notation i.e. height should have same or lower asymptotic
growth rate than log(n)
n: number of elements in the tree

「ツリーは各サブツリーのバランスが取れており、2つのサブツリーの高さが最大で1つだけ異なる」という定義の後には、AVLツリーが続きます。

AVLツリーは平衡型ですが、すべての平衡型ツリーがAVLツリーであるとは限らないため、平衡型ツリーはこの定義を保持せず、内部ノードが不平衡になる可能性があります。ただし、AVLツリーでは、すべての内部ノードのバランスをとる必要があります。


3

バランスの取れたツリーの目的は、最小限の横断(最小の高さ)で葉に到達することです。ツリーの次数は、ブランチの数から1を引いた数です。バランスの取れたツリーは、バイナリではない場合があります。


0
  1. ツリー内のノードの高さは、そのノードから葉までの最長パスの長さであり、パスの開始頂点と終了頂点の両方をカウントします。
  2. ツリー内のノードは、そのサブツリーの高さの差が1以下の場合、高さのバランスが取れています。
  3. すべてのノードが高さのバランスが取れている場合、ツリーは高さのバランスが取れています。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.