パート1。はじめに
パート2。バランスと挿入
これは、赤黒木を理解するシリーズのパート2です。最初の部分を見逃した場合は、ここでチェックすることを強くお勧めします。そこで、cchdが出現した理由を整理し、そのプロパティのいくつかを棚に置きました。
このパートでは、挿入とバランス調整について見ていきます。これらのものは並んで行きます、ツリーのバランスをとらないとその特性を失い、それからほとんど意味がありません。
kchdは2-3ツリーであることを念頭に置いて(時々これを思い出させます)、すぐにその構築から始めます。しかし、今でもいくつかの説明が必要です。
ツリーのルートを除く、挿入されたすべてのノードは、赤色で挿入されます。これは、常に最初に既存のノードに値を追加し、その後でバランスをとるという事実によって説明されます(結果の4ノードの状況を思い出してください)。
最初の部分で、左側の赤黒木を分解していることがわかりました。これから、赤いノードは左側にしか存在できないことになります(反対の場合はバランスを取る必要があります)。
バランスを取るときに必要な3つの操作についても説明します。今は考えないで、木の建設中にすでに詳細を掘り下げてください。後で干渉しないように、ここでそれらの説明を提供します:)
最初の2つの操作はピボット操作です。これらの操作は、たとえばAVLツリーの場合の小さな左折および右折とも呼ばれます。ロジックは同じですが、これはすべてノードの色を使用して補完されます。3番目の操作はccdツリーに特化しています-これはカラーフリップまたはカラースワップです。
この記事から順番がはっきりしない場合は、インターネット上にそれらに関する多くの情報があります。使い方をお見せしたいと思います。
左折(左小旋回)
ここでは、ノードを左に回転させます。写真は回転操作を示しています。
, parentNode ( parentNode - x, childNode - y) childNode, . ! , , childNode , parentNode , ( , childNode - , , parentColor = RED, ). "" childNode (, tempNode). , . , childNode, parentNode, childNode, , (/) parentNode, parentNode .
( )
, . .
, parentNode . , parentNode - . , .
, ( , ), parentNode! ( ). .
- .
, .
24. . , , .
, , 5. , .
1 5. . , !
, - ( ). . - . , - . \ . , .
. , , , .
, 3 : , , .
1 , . . 5 - , ( ). 24 , , .
. - . , . - 24. .
, . ! . ( 24 , , )
( )! 2-3 .
, 2-3 ("" + ), , :) , , 2-3 , - , , "" .
. 15. 24. .
3. , 1, -1.
, . . + . ( , , ). , .
! .
, - , .
- 8. , . . , , .
+ .
, ( 15) - , . . , - . . !
- - .
, . , , . . .
. , . 2-3 ( 13 16, , ).
- , , \. .
, , .
-
-
- - , . , , . , !
- , . , , . , !
これで、ツリーの構築をもう一度調べて分析し、最初の記事のプロパティを確認して、「もしも...?」という質問をすることができます。(私を信じてください、これは非常に便利です!)。一般的に、左側の赤黒木にノードを挿入することについてお話ししたいのはこれだけです。
値検索操作について少し
取得の操作は、他の二分木での検索と同じです。色はまったく関係ありません。
結論
これで、ccdの挿入とバランス調整に関する2番目の部分は終わりです。あなたの質問をし、批判し、以下の記事を補足してください!最後の第3部では、赤黒木で最も難しいトピックである要素の削除について説明します。またね:)