【发布时间】:2018-10-25 20:07:11
【问题描述】:
这与 Python 如何通过引用传递或通过值传递取决于对象是否不可变。我能够递归地遍历二叉树并打印出所有值,但如果我想返回一个特定元素,那就有点困难了。在下面的代码中,我(两次)尝试返回一个节点,如果它的数据属性与传入的整数匹配。n1 和 n2 是那些 int 值。
def get_node(self, d, root, n=[]):
if (root == None):
return
else:
if(root.data == d):
n.append(root)
self.get_node(d,root.left)
self.get_node(d, root.right)
return n
def tree_traversal(self, n1, n2):
n1 = self.get_node(n1,self.root)[0]
n2 = self.get_node(n2,self.root)[1]
print(n1.data)
print(n2.data)
return self.helper(n1,n2)
这行得通,我得到一个包含我正在寻找的节点对象的列表。但是,如果我没有返回(并作为参数传递)一个列表,而是使用一个字符串或一个稍后更改的 None 对象,这不起作用。我认为这是因为列表是可变的,而字符串不是。更重要的是,您会看到我必须将 n[1] 分配给 n2,因为出于某种原因,即使在退出 get_node 递归调用并为 n2 重新执行此操作之后,返回的列表仍然在第 0 个索引中包含 n1。
有人可以解释为什么分配给n2时列表仍然被修改吗?有没有办法代替作为参数传递并返回一个空列表n,作为参数传递并返回一个具有默认值None的常规对象?
【问题讨论】:
标签: python python-3.x recursion binary-tree