中等树深度优先搜索
PROBLEM / 研究生阶段
437. 路径总和 III
给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。
路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
示例 1:

输入: root = 10,5,-3,3,2,null,11,3,-2,null,1, targetSum = 8 输出: 3 解释: 和等于 8 的路径有 3 条,如图所示。
示例 2:
输入: root = 5,4,8,11,null,13,4,7,2,null,null,5,1, targetSum = 22 输出: 3
提示:
- 二叉树的节点个数的范围是
[0,1000] -109 <= Node.val <= 109-1000 <= targetSum <= 1000
参考解法
下面保留的是原始练习仓库中的个人作答,可在右侧工作台中独立重写,再按需揭示对照。
python
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def pathSum(self, root, targetSum):
if not root:
return 0
def dfs(node, current_sum):
if not node:
return 0
current_sum += node.val # 累加当前节点到路径和
count = 1 if current_sum == targetSum else 0
count += dfs(node.left, current_sum)
count += dfs(node.right, current_sum)
return count
total = dfs(root, 0) # 以当前节点出发+左与右
total += self.pathSum(root.left, targetSum) # 左子树为起点
total += self.pathSum(root.right, targetSum) # 右子树为起点
return total
"""
:type root: Optional[TreeNode]
:type targetSum: int
:rtype: int
"""
YOUR SOLUTION437. 路径总和 III