Python 列表未在助手函数中更新
我已经编写了以下代码来查找二叉树的根到叶路径。但此代码没有更新op list变量。当我使用op.extendvalue时 在helper函数中,它扩展了列表,但不确定为什么不添加列表?我希望op是一个路径列表,而路径本身就是一个列表。e、 g: [1,2,5],[1,3]] python 2.7代码:Python 列表未在助手函数中更新,python,Python,我已经编写了以下代码来查找二叉树的根到叶路径。但此代码没有更新op list变量。当我使用op.extendvalue时 在helper函数中,它扩展了列表,但不确定为什么不添加列表?我希望op是一个路径列表,而路径本身就是一个列表。e、 g: [1,2,5],[1,3]] python 2.7代码: 我知道你有什么问题了@J.K.发现了什么。问题是,每当你到达一片叶子时,你都会把对currPath的引用放到op中。因为这是一个引用,所以当您以后进一步操作currPath时,所有被引用的对象都会
我知道你有什么问题了@J.K.发现了什么。问题是,每当你到达一片叶子时,你都会把对currPath的引用放到op中。因为这是一个引用,所以当您以后进一步操作currPath时,所有被引用的对象都会发生变化,即您推送到op的对象。因为在遍历树的最后,currPath是空的,所以op中的所有引用对象也是空的。要解决这个问题,只需每次将列表复制到“op”中。因此:
op.append(currPath)
应该是:
op.append(list(currPath))
我想你会得到你期望的结果
这里有一个完整的例子。在未来,这是我们希望看到的问题:
class Node:
def __init__(self, val, left = None, right = None):
self.val = val
self.left = left
self.right = right
root = Node("A",
Node("B",
Node("C",
Node("D"))),
Node("F",
Node("G",
Node("H")),
Node("I",
None,
Node("J")))
)
def treepaths(root):
op = []
currPath = []
def _path(root):
if not root:
return
currPath.append(root.val)
_path(root.left)
if not root.left and not root.right:
op.append(list(currPath))
_path(root.right)
currPath.pop()
_path(root)
return op
print(treepaths(root))
其结果是:
[['A', 'B', 'C', 'D'], ['A', 'F', 'G', 'H'], ['A', 'F', 'I', 'J']]
如果没有修复,您将获得:
[[], [], []]
我猜currPath.pop正在从op中删除路径。尝试注释这行吗?我在代码中看到了逻辑。我可以看到如何使它读得更好一点,效率更高一点,但它似乎应该起作用。你能提供代码来构建一个示例树,显示输出,并给出你的预期输出吗?换句话说,你能向史蒂夫表示感谢吗!我仍然想知道代码如何与op.extendcurrpath配合使用。很高兴我能帮上忙!使用op.extend,您将得到不同的结果。这将分别将currPath中的每个项添加到op,而不是添加列表本身。因此,在这种情况下,您只会得到一个字符串列表,而不是一个字符串列表。这是可行的,因为您必须复制单个元素才能将它们添加到ops中,所以复制引用不适用。
[[], [], []]