直感的に、「バランスの取れたツリー」は、各ノードの左右のサブツリーが「ほぼ同じ」数のノードを持たなければならないツリーでなければなりません。
もちろん、赤黒木*(最後の定義を参照)のバランスについて話すとき、実際には、それらは高さのバランスが取れており、その意味で、バランスが取れていることを意味します。
上記の直観を次のように形式化しようとするとします。
定義:バイナリツリーは -balanced と呼ばれ、、ノードごとに不等式
がすべて保持され、上記のステートメントが失敗するノードがあります。は、および左サブツリー内のノードの数ですがルート(ルートを含む)であるツリーの下のノードの数です。
このトピックに関する文献のいくつかでは、これらはウェイトバランスツリーと呼ばれています。
ノードを持つバイナリツリーが -balanced(定数)である場合、ツリーの高さはであるため、適切な検索を維持できることがわかります。プロパティ。
質問は次のとおりです。
いくつかありますすべてのビッグ十分な赤黒木があるように、 -balancedは?
使用する赤黒木の定義(Cormenらによるアルゴリズムの紹介から):
各ノードが赤または黒に色付けされているバイナリ検索ツリー
- 根は黒です
- すべてのNULLノードは黒です
- ノードが赤の場合、その子は両方とも黒です。
- 各ノードについて、そのノードから子孫NULLノードへのすべてのパスには、同じ数の黒いノードがあります。
注:上記の -balancedの定義では、NULLノードはカウントしません。(私たちがそうするかどうかは問題ではないと思いますが)。