-1
Pythonのオブジェクトとクラスについて理解するために、私はバイナリ検索ツリー用のコードを書いていました。関数Pythonに渡されたオブジェクトへの参照
ノードが何を指しているのかを変更しようとすると、メソッドに渡されるノードを変更する代わりにpythonが新しい変数を作成しています。メソッド内でどのノードが指しているのかをどのように変更することができますか?
Pythonのオブジェクトとクラスについて理解するために、私はバイナリ検索ツリー用のコードを書いていました。関数Pythonに渡されたオブジェクトへの参照
ノードが何を指しているのかを変更しようとすると、メソッドに渡されるノードを変更する代わりにpythonが新しい変数を作成しています。メソッド内でどのノードが指しているのかをどのように変更することができますか?
これはPythonの問題ではなく、ポインタ(C++スタイルのリファレンスではありません)を使用するすべての単一言語で同じです。削除操作中に、親のノードのポインタをその子ノードに変更する必要があります。あなたはnode
を削除するときに、あなたがどこにも指していない「ノード」変数に新しい値を代入しようとすると、新しいものに親子供をいない変更する必要がフォーム
parent
/ \
node ...
/\
child1 child2
の構造を有しています。したがって、あなたは次のようなものになります:
parent
/ \
child1 ...
/\
child2 ...
あなたのお返事ありがとうございます。 _deleteメソッドの最初のif文は、子が存在しないことを確認し、ノードをNoneにしますが、deleteメソッドから渡されるself.rootを参照するのではなく、新しい変数ノードを作成しています。 – MrWolf
- これはC++の意味での参照ではありません。それをポインタと考えてください。 「同じ変数に新しいポインタを割り当てる」ことはできません。 「ルート」を削除することはできません。メインオブジェクト、ツリーオブジェクトが必要です。ツリーオブジェクトは常に "どこ"がルートであるかを示します。ルートを削除する場合は、この参照を変更する必要があります。 – lejlot