← 题库
中等深度优先搜索

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