赤黒木を理解する。パート1。はじめに

かなり長い間、私は赤黒木(以下、kchdと戦いました私が見つけたすべての情報は、「木の葉と根は常に黒であるため」、「赤黒木の上位5つのプロパティ」、「バランスをとる場合は3ケース、ノードを削除する場合は12ケース」の精神に基づいていました。この配置は私には合いませんでした。





ツリーのプロパティ、擬似コード、バランシングオプションを覚えたくなかったので、その理由を知りたかったのです。色はどのようにバランスをとるのに役立ちますか?赤いノードに赤い子を持たせられないのはなぜですか?木の深さが「黒の高さ」で測定されるのはなぜですか?





これらの質問に対する回答を受け取ったのは、2、3本の木についての講義へのリンクが与えられたときだけでした





この記事は3つの論理的な部分に分かれています。示されている順序で読むことをお勧めします。最初の部分(これ)は、ccdの紹介とそれを知ることを目的としています。第2部では、バランス調整とccdへの挿入について説明します。3番目の最後の部分では、ノードを削除するプロセスを分析します。辛抱強く読んで楽しんでください:)





免責事項





  1. この記事では、ツリーの長所と短所、そのアプリケーションなどに関する情報はありません。ツリーの漸近解析とインターネット上での操作に関する情報はたくさんあります。





  2. この資料は、すでにccdに精通していて、今はそれらを理解したい人、およびそれらを知り始めたばかりの人を対象としています。





  3. この記事には、構造の実装の詳細は含まれていません。





  4. — . .





-

- , -





, , - - , , , . - - .





- - , . - ( , ). 2-, - 3-. : . :





  1. , .





  2. - , - .





  3. - - , .





, , 5. - 5 .





12. 12 (, ), "" ( , ), .. . 5-12.





. 17. . 5-12-17.





- , . ! "" . . 12, 5, - 17.





, , - . : , "" . 3 :





  1. . , ( ).





  2. . ( ).





  3. . , .





.





, . 3. , . , 3 5. 3 5 . 3-5.





, :)





4 3-5. 3-4-5, , , . ? , .. "" 4 .





. , 4 , - , 4. 5. :





5 ? : - , - . 5 4, 5 , .. . 5 , "", 4-12 (, 5 , "" ).





, . :





  1. , , .





  2. , , , .





  3. , , .





, . , , - . , - (, 4-5-12, , 5 4 12). , . , , ( , 7? 9?).





, , , . , , , . .





, , , . , , ( ). - .





-

, - - . - . ?





, 3-. 3- 2- . - , , , ( ), .





, , .





, - . , , ( , ).





-

, - , , 3- ( ). , , . , ( ).





1.





. , , - 3- 2-3 . , 4-, :)





2.





. , : .





3.





null- (, ) - . , . , , .





nullノードに触れたので、ツリー内のすべてのノードには常に2つの子孫が必要であり、子孫への参照がゼロの場合は、正確にnullノードになります。実際、これは実装に疑問を投げかけます。ヌルノードを追加する方が便利でした(イテレーターやバランシングなどの問題が少ない)。





プロパティ4。





木の高さは黒いノードによってのみ測定され、「黒い高さ」と呼ばれます。ここでも、一般的にすべてが明らかになります。赤いノードは黒いノードへの追加にすぎず、その一部であるため、高さは黒いノードに基づいていると見なされます。





これで紹介は終わりです。次のパートでは、ノードをツリーに挿入してバランスを取る方法について説明します。








All Articles