路径总和III
437.路径总和III
题目描述
思路:DFS递归+前缀和
因为题目要求是从任意结点开始,到任意子结点的路径的和等于目标和,所以最好的办法就是记录这条路径的前缀和,然后用遍历搜索是否有相等的来统计个数即可。
在递归时,左右的结点互不影响,所以用回溯。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def pathSum(self, root: TreeNode, targetSum: int) -> int:
def dfs(node, presum):
if not node:
return 0
cur = presum[-1] + node.val
# 以node结尾,和为targetSum的个数
ans = sum(cur - p == targetSum for p in presum)
presum.append(cur)
return ans + dfs(node.left, list(presum)) + dfs(node.right, list(presum))
return dfs(root, [0])