次の赤黒ツリーの定義を想定してみましょう。
- これは二分探索木です。
- 各ノードは赤または黒の色で表示されます。ルートは黒です。
- エッジで接続された2つのノードを同時に赤にすることはできません。
- wikiのように、NILリーフの適切な定義が必要です。NILの葉は黒く着色されています。
- ルートから任意のNILリーフへのパスには、同じ数の黒いノードが含まれます。
質問
赤黒ツリーのinsert
and delete
操作を実装したとします。さて、あなたが有効な赤黒木を与えられたら、それを構築する一連の操作insert
とdelete
操作が常にありますか?
動機
この質問は、この質問とこの質問からの議論によって動機付けられています。ます。
個人的には、黒のノードだけで構成される有効な赤黒木を想像すると(完全にバランスの取れた木を想像していることを意味します)、それを構築するシーケンスinsert
とdelete
操作があると思います。しかしながら、
- 私はそれを正確に証明する方法がわかりません
- より一般的なケースにも興味があります
insert
とdelete
構築するためにのみ黒のノードからなる有効な赤黒木は。これは、使用の高さのツリーを作成するために挿入/欠失時間。最初に、2 h + 1 − 1の挿入を使用して幅優先の方法で完全にバランスの取れた赤黒ツリーを作成し、次にh ∗ 2 h − 1を使用します。挿入と同量の削除により、完全に黒いツリーに再描画されます。ここでのコツは、ルートに到達するまでツリーの最上部の赤い層を回上に移動することです。
insert
そして特定のRed-Black Treeをdelete
操作で構築することは可能ですか?
insert
andの正確な実装に依存しdelete
ます。これらの操作を行う方法はいくつかあります。b)RBツリーは基本的に4次のBツリーであるため、そこからインスピレーションを探すことができます。RBからB(および/または逆方向)へのマッピングは一意ではないため、詳細は扱いにくいことがあります。