LeetCode 算法 #257 二叉树路径

LeetCode algorithm #257 Binary Tree Paths

对于LeetCode算法题#257 Binary Tree Paths。我知道我们可以使用空字符串 path 来连接节点值,但为什么当我尝试使用列表 path 来存储节点值时,我也总是得到类似 [[1,2,5,3],[1,2,5,3]] 的输出?

代码:

class Solution:
    def binaryTreePaths(self, root):
        """
        :type root: TreeNode
        :rtype: List[str]
        """
        # dfs
        
        res = []
        def helper(node, path):
            
            if not node: return 
            
            #path+=str(node.val)
            path.append(node.val)

            # leaf node
            if not node.left and not node.right:
                res.append(path)
                #return

            #path += '->'  
            helper(node.left, path)
            helper(node.right, path)

        helper(root, [])
        return res
        

测试用例:[1,2,3,null,5]

您正在将对同一 path 列表的引用传递给两个递归调用,因此追加这些调用(以及每个递归调用)将追加到同一列表。

有些相关 - "Least Astonishment" and the Mutable Default Argument

字符串是不可变的。改变一个字符串 returns 一个 新引用 ,这就是为什么该解决方案可以改用字符串来工作的原因。