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 一个 新引用 ,这就是为什么该解决方案可以改用字符串来工作的原因。
对于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 一个 新引用 ,这就是为什么该解决方案可以改用字符串来工作的原因。