web-dev-qa-db-ja.com

バランスツリーの定義

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

これが愚かな質問である場合、私は謝罪しますが、この定義はすべてのノードにツリーの葉まで、またはルートのすぐ左と右のサブツリーのみに適用されますか?これをフレーム化する別の方法は、ツリーの内部ノードのバランスが崩れ、ツリー全体がバランスを保たれる可能性があると思いますか?

86
Mark Soric

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

  1. 左右のサブツリーの高さは最大で1つ異なります。
  2. 左のサブツリーはバランスが取れており、かつ
  3. 適切なサブツリーはバランスが取れています

これによれば、次のツリーはバランスが取れています。

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

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

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

ただし、最初のポイントの特定の制約は、ツリーのタイプによって異なります。上記のリストは、 AVLツリー の典型的なものです。

赤黒木 たとえば、より柔軟な制約を課します。

107

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

あなたが話していたバランス条件は、AVLツリーの場合のようです。
ここにAVLツリーのバランス条件の正式な定義があります。

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

次の質問、「height?」

バイナリツリー内のノードの「height」は、そのノードからリーフまでの最長パスの長さです。

奇妙だが一般的なケースが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)      
44
CherylG

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

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

違いはありません。 6が偶数であっても8が偶数であると言う場合、4が偶数であっても6が偶数であることも示します。したがって、2が偶数の場合でも4は偶数であるということです。したがって、0が偶数の場合でも2は偶数であることがわかります。したがって、6が偶数であっても8が偶数である場合、(間接的に)6、4、2、および0が偶数である場合は8が偶数であることを示します。

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

7
David Schwartz

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

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
div

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

2
Mohamed ROMDANE
  1. ツリー内のノードの高さは、そのノードからリーフまでの最長パスの長さであり、パスの開始頂点と終了頂点の両方をカウントします。
  2. サブツリーの高さの差が1以下の場合、ツリーのノードは高さのバランスが取れています。
  3. すべてのノードの高さのバランスが取れている場合、ツリーの高さのバランスが取れています。
0
John Paul