2016-04-25 11 views
-1

Pythonのオブジェクトとクラスについて理解するために、私はバイナリ検索ツリー用のコードを書いていました。関数Pythonに渡されたオブジェクトへの参照

ノードが何を指しているのかを変更しようとすると、メソッドに渡されるノードを変更する代わりにpythonが新しい変数を作成しています。メソッド内でどのノードが指しているのかをどのように変更することができますか?

答えて

0

これはPythonの問題ではなく、ポインタ(C++スタイルのリファレンスではありません)を使用するすべての単一言語で同じです。削除操作中に、親のノードのポインタをその子ノードに変更する必要があります。あなたはnodeを削除するときに、あなたがどこにも指していない「ノード」変数に新しい値を代入しようとすると、新しいものに子供をいない変更する必要がフォーム

 parent 
    / \ 
    node ... 
    /\ 
child1 child2 

の構造を有しています。したがって、あなたは次のようなものになります:

 parent 
    / \ 
    child1 ... 
    /\ 
child2 ... 
+0

あなたのお返事ありがとうございます。 _deleteメソッドの最初のif文は、子が存在しないことを確認し、ノードをNoneにしますが、deleteメソッドから渡されるself.rootを参照するのではなく、新しい変数ノードを作成しています。 – MrWolf

+0

- これはC++の意味での参照ではありません。それをポインタと考えてください。 「同じ変数に新しいポインタを割り当てる」ことはできません。 「ルート」を削除することはできません。メインオブジェクト、ツリーオブジェクトが必要です。ツリーオブジェクトは常に "どこ"がルートであるかを示します。ルートを削除する場合は、この参照を変更する必要があります。 – lejlot

関連する問題