题解 | #二叉树中和为某一值的路径(三)#
二叉树中和为某一值的路径(三)
https://www.nowcoder.com/practice/965fef32cae14a17a8e86c76ffe3131f
题目:https://www.nowcoder.com/practice/965fef32cae14a17a8e86c76ffe3131f
两次递归。dfs递归遍历以每个结点为根的子树,查找该子树是否有路径和等于目标值的。FindPath递归遍历二叉树每个结点作为一次根节点。
# 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 __init__(self): self.res=0 def dfs(self, root: TreeNode, sum: int): # 处理树为空 # 递归出口 if not root: return if root.val==sum: self.res+=1 # 更新 sum -= root.val #路径不需要在叶子节点结束。左右子树递归,进入子节点继续找 #dfs递归遍历以每个结点为根的子树,查找该子树是否有路径和等于目标值的。 self.dfs(root.left, sum) self.dfs(root.right, sum) def FindPath(self , root: TreeNode, sum: int) -> int: if not root: return self.res #查询以某节点为根的路径数 self.dfs(root, sum) #路径不需要从根节点开始,所以左右子树需要也作为新的根节点开始找 #FindPath递归遍历二叉树每个结点作为一次根节点 self.FindPath(root.left, sum) self.FindPath(root.right, sum) return self.res