削除 (一般に) は可換ではありません。反例を次に示します。
4
/ \
3 7
/
6
4 を削除してから 3 を削除するとどうなるでしょうか。
4 を削除すると、新しいルートとして 6 が取得されます。
6
/ \
3 7
3 を削除してもツリーは変わりませんが、次のようになります。
6
\
7
3 を削除してから 4 を削除するとどうなるでしょうか。
3 を削除しても、ツリーは変わりません。
4
\
7
/
6
ただし、ここで 4 を削除すると、新しいルートは 7 になります。
7
/
6
結果として得られる 2 つのツリーは同じではないため、削除は可換ではありません。
アップデート
これは、2 つの子を持つノードを常に削除する場合の制限を読みませんでした。私の解決策は一般的なケースです。反例が見つかったら更新します。
別の更新
具体的な証拠はありませんが、推測を危険にさらすつもりです:
一般的なケースでは、子供が 2 人いるのか、1 人なのか、または子供がいないのかによって、削除の処理方法が異なります。私が提供した反例では、最初に 2 つの子を持つノードを削除し、次に 1 つの子を持つノードを削除します。その後、子のないノードを削除してから、子が 1 つある別のノードを削除します。
2 つの子を持つノードのみを削除するという特殊なケースでは、両方のノードが同じサブツリーにある場合を考慮する必要があります (異なるサブツリーにあるかどうかは問題ではないため、削除の順序に基づいて全体の構造が変わることはありません)。実際に証明する必要があるのは、各ノードに 2 つの子がある同じサブツリー内のノードの削除順序が重要かどうかです。
A が B の祖先である 2 つのノード A と B を考えます。次に、質問を次のように絞り込むことができます。
相互に祖先と子孫の関係にある二分探索木からの 2 つのノードの削除を検討している場合、削除は交換可能ですか (これは、それらが同じサブツリーにあることを意味します)?
ノード (A としましょう) を削除すると、右側のサブツリーをトラバースして最小要素を見つけます。このノードはリーフ ノードになり、B と等しくなることはありません (B には 2 つの子があり、リーフ ノードになれないため)。次に、A の値をこのリーフノードの値に置き換えます。これが意味することは、ツリーの唯一の構造上の変更は、A の値をリーフ ノードの値に置き換えることと、リーフ ノードを失うことです。
B についても同じプロセスが必要です。つまり、ノードの値を置き換え、リーフ ノードを置き換えます。したがって、一般に、2 つの子を持つノードを削除する場合、構造上の変更は、削除するノードの値の変更と、置換として使用する値のリーフ ノードの削除のみです。
したがって、質問はさらに洗練されています。
削除の順序に関係なく、常に同じ置換ノードを取得することを保証できますか (2 つの子を持つノードを常に削除する場合)。
答えは(私が思うに)イエスです。なんで?ここにいくつかの観察があります:
- 最初に子孫ノードを削除し、次に祖先ノードを削除するとします。子孫ノードを削除したときに変更されたサブツリーが、先祖ノードの右側の子の左側のサブツリーにありません。これは、このサブツリーが影響を受けないことを意味します。これはまた、削除の順序に関係なく、2 つの異なるサブツリーが変更されるため、操作は交換可能であることを意味します。
- 繰り返しになりますが、最初に子孫ノードを削除し、2 番目に祖先ノードを削除するとします。子孫ノードを削除したときに変更されたサブツリーは、先祖ノードの右側の子の左側のサブツリーにあります。しかし、ここでも重なりはありません。その理由は、最初に子孫ノードを削除すると、子孫ノードの右側の子の左側のサブツリーが表示されるためです。次に先祖ノードを削除すると、先祖ノードの右子の左サブツリーに入った後は常に左に向かっているため、そのサブツリーを下ることはありません。繰り返しますが、最初に何を削除するかに関係なく、異なるサブツリーを変更しているため、順序は問題ではないようです。
- もう 1 つのケースは、先祖ノードを最初に削除し、最小ノードが子孫ノードの子であることがわかった場合です。これは、子孫ノードが 1 つの子を持つことになり、1 つの子を削除するのは簡単であることを意味します。このシナリオで、最初に子孫ノードを削除した場合を考えてみましょう。次に、子孫ノードの値をその右の子に置き換えてから、右の子を削除します。次に、祖先ノードを削除すると、同じ最小ノード (古い削除されたノードの左の子であり、置き換えられたノードの左の子でもあります) が見つかります。いずれにせよ、同じ構造になってしまいます。
これは厳密な証明ではありません。これらは私が行ったいくつかの観察です。ぜひ、気軽に穴をあけてみてください!