题解 | #二叉树中和为某一值的路径#
二叉树中和为某一值的路径
http://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca
【剑指offer】二叉树中和为某一值的路径(python)
- python创建新列表的方法之一,就是直接把元素用方括号括起来,这里 return [str(root.val)] 就直接返回了一个列表。
- DFS深度遍历,得到所有路径,再判断路径和是否等于目标值。
- map() 会根据提供的函数对指定序列做映射。map(function, iterable, ...)
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。这里直接用了一个 int 做类型转换。 - DFS中直接使用 += 做列表合并。包括 [str(root.val) + '-' + path for path in self.dfs(root.left)]也使用了 + 直接列表合并。
- 参考“删除链表中重复的点”,用到了filter,res = list(filter(lambda c: res.count(c)==1, res))
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
这里是list(map(..,...))# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# 返回二维列表,内部每个列表表示找到的路径
def FindPath(self, root, expectNumber):
# write code here
res = []
path = self.dfs(root)
for i in path:
if sum(map(int,i.split('-')))==expectNumber:
res.append(list(map(int,i.split('-'))))
return res
def dfs(self,root):
if not root:
return []
if not root.left and not root.right:
return [str(root.val)]
path = [str(root.val)+'-'+path for path in self.dfs(root.left)]
path += [str(root.val)+'-'+path for path in self.dfs(root.right)]
return path