このページごとhttp://www.eternallyconfuzzled.com/tuts/datastructures/jsw_tut_rbtree.aspx 「トップダウン削除」は、赤いノードを押し下げることによって積極的にツリーのバランスを取る赤黒ツリー ノード削除の実装です。ツリーを介して、削除されるリーフ ノードが確実に赤くなるようにします。葉ノードは必ず赤くなるため、ツリーの再バランスについて心配する必要はありません。赤い葉ノードを削除してもルールに違反することはなく、再調整するために追加の操作を実行する必要がないからです。バランスを取り、赤黒さを復元します。
「ボトムアップ削除」では、ツリーを下方向に通常のバイナリ検索を実行して削除するノードを見つけ、リーフ ノードを交換し (見つかったノードがリーフ ノードでない場合)、赤黒ツリー プロパティを復元します。赤黒のルール違反を修正しながら木を登ることによって。
トップダウン削除は再調整操作の数を最小限に抑えますか? トップダウンの削除が、ダウンの途中であまりにも多くの再カラーリングと再バランスを積極的に行う可能性はありますか?
このシナリオはどうですか: (x) は赤いノードを示します
8
_____/ \____
/ \
4 12
/ \ / \
2 6 10 14
/ \ / \ / \ / \
1 3 5 7 9 11 13 15
\
(16)
16 を削除したい場合、ボトムアップの削除ではリバランスは行われませんが、トップダウンの削除では、ノードの色が完全に変更されてから、色の変更操作が不要であることがわかります。
反復 1:
(8)
_____/ \____
/ \
4 12
/ \ / \
2 6 10 14
/ \ / \ / \ / \
1 3 5 7 9 11 13 15
\
(16)
反復 2:
8
_____/ \____
/ \
(4) (12)
/ \ / \
2 6 10 14
/ \ / \ / \ / \
1 3 5 7 9 11 13 15
\
(16)
反復 3:
8
_____/ \____
/ \
(4) 12
/ \ / \
2 6 (10) (14)
/ \ / \ / \ / \
1 3 5 7 9 11 13 15
\
(16)
次に反復 4 で、16 はすでに赤なので、押し下げる必要がないことがわかります。では、トップダウン削除は時間とスペースの効率が良いのでしょうか?