[英]python understanding lists in recursion
我有一個遞歸的 function 遍歷一棵樹並收集一個列表。 我不明白為什么我必須將“列表”轉換為list
。 我在代碼中添加了注釋。 刪除list()
將導致一個空列表。
class TreeNode:
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
def find_paths(r, sum):
def helper(root, summ, path, paths):
if not root:
return
path.append(root.val)
if not root.left and not root.right and summ == root.val:
"""
if I print path
[12, 7, 4]
[12, 1, 10]
"""
# why is list() necessary here
paths.append(list(path))
else:
helper(root.left, summ - root.val, path, paths)
helper(root.right, summ - root.val, path, paths)
del path[-1]
paths = []
helper(r, sum, [], paths)
return paths
def main():
root = TreeNode(12)
root.left = TreeNode(7)
root.right = TreeNode(1)
root.left.left = TreeNode(4)
root.right.left = TreeNode(10)
root.right.right = TreeNode(5)
sum = 23
print("Tree paths with sum " + str(sum) +
": " + str(find_paths(root, sum)))
main()
這樣做, paths.append(path)
將導致這個Tree paths with sum 23: [[], []]
當您執行以下操作時,方法list(path)
會創建列表的副本:
paths.append(list(path))
當您執行以下操作時,您實際上是在附加列表的副本:
paths.append(path)
您正在將引用附加到列表中,因此當您修改它時,如下所示:
del path[-1]
它會影響添加到paths
的引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.