给定一个二叉树root和一个整数值 sum ,求该树有多少路径的的节点值之和等于 sum 。
1.该题路径定义不需要从根节点开始,也不需要在叶子节点结束,但是一定是从父亲节点往下到孩子节点
2.总节点数目为n
3.保证最后返回的路径个数在整形范围内(即路径个数小于231-1)
数据范围:
假如二叉树root为{1,2,3,4,5,4,3,#,#,-1},sum=6,那么总共如下所示,有3条路径符合要求
{1,2,3,4,5,4,3,#,#,-1},6
3
如图所示,有3条路径符合
{0,1},1
2
{1,#,2,#,3},3
2
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param root TreeNode类 # @param sum int整型 # @return int整型 # class Solution: def FindPath(self , root: TreeNode, sum: int) -> int: # write code here collection = [] self.traverse1(root, collection) res = 0 for i in collection: for j in i: if j == sum: res += 1 return res def traverse1(self, root, collection): if root is None: return tmp = [] self.traverse2(root, 0, tmp) collection.append(tmp) self.traverse1(root.left, collection) self.traverse1(root.right, collection) def traverse2(self, root, now_res, num_arr): if root is None: return num_arr.append(now_res + root.val) self.traverse2(root.left, now_res + root.val, num_arr) self.traverse2(root.right, now_res + root.val, num_arr)
# class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param root TreeNode类 # @param sum int整型 # @return int整型 # class Solution: def FindPath(self, root: TreeNode, sum: int) -> int: # write code here if not root: return 0 # 每一个结点统计开始时,初始化累加器 self.count = 0 return self.dfs(root, sum) + \ self.FindPath(root.left, sum) + \ self.FindPath(root.right, sum) # 对结点进行深度遍历,遍历过程中遇到和为sum的路径,累加器count加1 count = 0 def dfs(self, root, sum): if not root: return 0 if sum == root.val: self.count += 1 self.dfs(root.left, sum - root.val) self.dfs(root.right, sum - root.val) # 返回累加器的值 return self.count