【剑指offer】二叉树中和为某一值的路径(python)

  1. python创建新列表的方法之一,就是直接把元素用方括号括起来,这里 return [str(root.val)] 就直接返回了一个列表。
  2. DFS深度遍历,得到所有路径,再判断路径和是否等于目标值。
  3. map() 会根据提供的函数对指定序列做映射。map(function, iterable, ...)
    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。这里直接用了一个 int 做类型转换。
  4. DFS中直接使用 += 做列表合并。包括 [str(root.val) + '-' + path for path in self.dfs(root.left)]也使用了 + 直接列表合并。
  5. 参考“删除链表中重复的点”,用到了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