(バイナリ) ツリーのルートから各リーフまでのすべてのパスを出力するアルゴリズムを Python で記述しようとしています。これが私のコードです:
def fb_problem(node, curr_trav):
curr_trav = curr_trav + [node]
if node.left is None and node.right is None:
for path_node in curr_trav:
print path_node.data
print "XXX"
if node.left is not None:
fb_problem(node.left, curr_trav)
if node.right is not None:
fb_problem(node.right, curr_trav)
fb_problem(root, [])
現在のトラバーサルでノードのリストを保持し、リーフに到達したらリストを出力します。ただし、Pythonがオブジェクトを渡す方法について誤解しています。各再帰呼び出しが完了してスタックからポップされると、元の変数は再帰呼び出しの影響を受けないだろうと考えました。curr_trav
しかし、それはまるでラインのようです
curr_trav += [node]
元のリストを変更しています。+=
演算子は、元のオブジェクトを実際に変更する とは対照的に、新しいリストを返します.append()
。この呼び出しは、元のオブジェクトを変更するのではなく、関数内のオブジェクトに与えられた名前を再割り当てするだけであってはなりませんか? 行を次のように変更すると
t_trav = curr_trav += [node]
すべて正常に動作しますが、元の行の問題が何であったかわかりません。私の質問が不明な場合はお知らせください。