非検索バイナリツリーからノードを削除する方法を知りたい。C - バイナリツリーからノードを削除する
I.e.私は、このバイナリツリーがある場合:
....0.... ...1.....2... .......3.....4..
をそして私は値が2
非検索バイナリツリーからノードを削除する方法を知りたい。C - バイナリツリーからノードを削除する
I.e.私は、このバイナリツリーがある場合:
....0.... ...1.....2... .......3.....4..
をそして私は値が2
それは(探索木のように)ソートされた木であるならば、あなたが希望であるノードを削除しますしたいです通常はノード(例では2
)を削除し、それを左の子サブツリーの右端の葉(3
)または右のサブツリーの最も左の葉(4
)に置き換えます。バイナリ検索ツリーでない場合は、同じことを実行できます。それは、もちろん、あなたのツリーのセマンティクスと構造が何を表しているかに依存します。構造が意味を持たない場合は、削除するノードを削除し、それを任意のリーフノードに置き換えます。
0から3の右の子をリンクし、3から4の右の子をリンクして2を解放する必要がありますか? –
2の左のサブツリーを忘れないでください!おそらくは3以上のものが含まれている可能性があります。また、割り当てを解放する再帰ルーチンがある場合は、2の子ポインタに注意してください(ノード2を解放する前にNULLに設定する必要があります)。別のオプションは、3が現在の葉から削除する値(2)へのデータ(3)の移動だけで、葉ノードを解放することです。置き換えはリーフノードからのものでなければならないことに注意してください。 (たとえば、0を削除する場合は、2を選択しないでください)。 – e0k
スキーマは理解できません。コードはどこですか? – Stargateur