关于二叉树的一道简单算法题,结果很诡异(python)

lintcode原题:
二叉树的路径和
给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。
一个有效的路径,指的是从根节点到叶节点的路径。
我的解答

"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
"""


class Solution:
    """
    @param: root: the root of binary tree
    @param: target: An integer
    @return: all valid paths
    """
    def binaryTreePathSum(self, root, target):
        # write your code here
        result=[]
        path=[]
        self.dfs(root,path,result,target)
        return result
        
        
        
    def dfs(self,root,path,result,target):
        if root is None:
            return
        path.append(root.val)
        if  root.left is None and  root.right is None and sum(path)==target:
            result.append(path)
        if root.left:
            self.dfs(root.left,path,result,target)
        if root.right:
            self.dfs(root.right,path,result,target)
        path.pop()
            

结果总是错误
输入
{1,2,4,2,3}
5
输出
[[],[]]
期望答案
[[1,2,2],[1,4]]

我实在想不通为什么答案是空,后来我意识到可能是传参数的问题,改成如下代码:

if  root.left is None and  root.right is None and sum(path)==target:
            result.append(path+[])

这里只改了中间那一行,将path改为path+[],居然华丽丽的成功了,实在是想不通为什么,有人指点一二吗?谢了!

阅读 1.6k
1 个回答
result.append(copy.copy(path)) # 新建一个list,否则你存的只是path的地址,path增加数据,result也会增加
path + [] 等效于新建了一个list

>>> a = [1]
>>> id(a) == id(a + [])
False
>>> id(a) == id(a)
True
>>>

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题