题目
分析
每个节点都有可能是路径的开始,所以每次先算以当前节点T为开始的符合条件的路径有几条。然后分别算以左右节点为开始的路径有几条。最后返回T的路径条数+左子树的路径条数+右子树的路径条数。
每次算路径和是否等于target时,用sum减去当前节点的数值,如果为0,则当前节点正好是一个路径的尾节点,当前存在1条,如果不为0,那么算左右子树有没有符合sum-当前节点数值的和的路径。
python代码
class Solution(object):
def pathSum(self, root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: int
"""
if not root:
return 0
res = self.dfs(root,sum)
left = self.pathSum(root.left,sum)
right = self.pathSum(root.right,sum)
return res+left+right
def dfs(self,root,sum):
if not root:
return 0
res = 0
if root.val == sum:
res = 1
return res+self.dfs(root.left,sum-root.val)+self.dfs(root.right,sum-root.val)