2

私は非常に悪い方法で全体的な二分探索木を説明する本を持っています私はこれまで私の本を詳しく調べて二分探索木のアイデアを得ることができましたが、二分探索木の操作の説明を見つけましたDelete

私は最初の2つの簡単な操作を理解しています。

  • 葉の削除(子のないノード):葉をツリーから簡単に削除できるため、葉の削除は簡単です。
  • 子が1つあるノードの削除:ノードを削除して、その子に置き換えます。

しかし、2人の子供がいるものは私には理解するのが本当に難しいです、私はすでにwikiや他のサイトで解決策を見つけようと読んだことがありますが、説明はちょっと暗号化されていると思います。

私はここの誰かが私にもっと詳細を教えてくれるか、それを別の方法で私に説明してくれることを望んでいましたか?

4

3 に答える 3

2

最初の2つのルールを理解していれば、2つの子を持つノードを削除することは理解するのが難しいことではありません。

それを考える非常に簡単な方法は、削除するノードの順序どおりの後続(または先行)に移動することです。次に、最初の2つのルールと前のルールを再度適用します。

プログラミング中に、完全に機能する後続(先行)関数を使用すると、コーディングの削除が非常に簡単になります。

このツリーの場合:

ここに画像の説明を入力してください

8を削除するには:

  • 9(7)に移動します

  • 9を10に置き換えます

  • 8を9に置き換えます(7)

12を削除するには:

  • 14に移動(10)

  • (9を10に置き換えます)

  • 12を14に置き換えます(10)

于 2013-01-01T14:52:39.233 に答える
2

簡単に言えば:

(前述のように)バイナリツリーに2つの子を持つノードNを削除するには、このNを左側のサブツリーの最大のノードまたは右側のサブツリーの最小のノードに置き換えます。

于 2013-06-05T09:37:20.640 に答える
1

ノードに2つの子がある場合、次のことを行う必要があります。

  1. 最小値を見つけます。
  2. 削除するノードのキーを最小要素に置き換えます。

この写真を見てください: 要素4を削除したい

ここに画像の説明を入力してください

  • 4には2人の子供がいます。

  • minrightサブツリーを見つけます。

  • 5個見つかりました。

  • したがって、4は5に置き換えられ、4は削除されます。

それがあなたが探しているものであることを願っています!!

于 2013-01-01T14:49:52.677 に答える