5

私は自分のバージョンの赤黒木を実装してきましたが、そのほとんどはWikipedia(http://en.wikipedia.org/wiki/Red-black_tree)のアルゴリズムに基づいています。ほとんどの部分はかなり簡潔ですが、明確にしておきたい部分が1つあります。

2つの非リーフ(非NULL)の子を持つツリーからノードを消去すると、どちらかの側の子を削除可能なノードに移動し、その子を削除するように指示されます。

それに基づいて、どちらの側から削除するかについて少し混乱しています。サイドをランダムに選択しますか、サイドを交互に選択しますか、それとも将来の削除ごとに同じサイドに固執しますか?

4

1 に答える 1

5

入力データについて事前の知識がない場合、どちらの側が新しい中間ノードまたは新しい子であることがより有益であるかを知ることはできません。

したがって、自分に最も適したルールを適用することができます(作成/計算が最も簡単です。おそらく「常に左側のルールを採用する」)。ランダムスキームを採用すると、通常、不要な計算が増えるだけです。

于 2010-04-03T09:00:16.123 に答える