我正在尝试在 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]
一切正常,但我不明白原行的问题是什么。如果我的问题不清楚,请告诉我。