LeetCode 437:路径总和 III 解法精讲
问题描述
LeetCode 437. 路径总和 III 要求统计二叉树中路径和等于目标值的路径数量。路径不需要从根节点开始,也不需要在叶子节点结束,但必须是从父节点指向子节点的方向。
解题思路
暴力递归法
遍历二叉树的每个节点,以该节点为起点向下搜索所有可能的路径,统计路径和等于目标值的数量。这种方法简单直观,但时间复杂度较高。
def pathSum(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
return dfs(root, 0) + pathSum(root.left, targetSum) + pathSum(root.right, targetSum)
前缀和优化法
利用前缀和的思想优化时间复杂度。在遍历二叉树时,记录从根节点到当前节点的路径和,并通过哈希表快速查找是否存在满足条件的前缀和。
def pathSum(root, targetSum):
from collections import defaultdict
prefix_sum = defaultdict(int)
prefix_sum[0] = 1
def dfs(node, current_sum):
if not node:
return 0
current_sum += node.val
count = prefix_sum.get(current_sum - targetSum, 0)
prefix_sum[current_sum] += 1
count += dfs(node.left, current_sum)
count += dfs(node.right, current_sum)
prefix_sum[current_sum] -= 1
return count
return dfs(root, 0)
复杂度分析
暴力递归法
- 时间复杂度:O(n^2),其中 n 是二叉树的节点数。最坏情况下,二叉树退化为链表。
- 空间复杂度:O(n),递归栈的深度取决于树的高度。
前缀和优化法
- 时间复杂度:O(n),每个节点只需遍历一次。
- 空间复杂度:O(n),哈希表存储前缀和的数量。
边界条件与注意事项
- 空树直接返回 0。
- 目标值可能为负数,不能提前终止搜索。
- 哈希表需要初始化 prefix_sum[0] = 1,表示路径和为 0 的情况。
测试用例
# 示例 1
root = TreeNode(10)
root.left = TreeNode(5)
root.right = TreeNode(-3)
root.left.left = TreeNode(3)
root.left.right = TreeNode(2)
root.right.right = TreeNode(11)
root.left.left.left = TreeNode(3)
root.left.left.right = TreeNode(-2)
root.left.right.right = TreeNode(1)
targetSum = 8
assert pathSum(root, targetSum) == 3
总结
路径总和 III 是一个典型的二叉树路径问题,暴力递归法易于理解但效率较低,前缀和优化法通过空间换时间显著提升性能。掌握这两种方法有助于解决类似问题。
BbS.okacop092.info/PoSt/1120_054045.HtM
BbS.okacop093.info/PoSt/1120_008747.HtM
BbS.okacop094.info/PoSt/1120_757510.HtM
BbS.okacop095.info/PoSt/1120_771945.HtM
BbS.okacop096.info/PoSt/1120_082334.HtM
BbS.okacop097.info/PoSt/1120_483265.HtM
BbS.okacop098.info/PoSt/1120_159254.HtM
BbS.okacop099.info/PoSt/1120_055233.HtM
BbS.okacop114.info/PoSt/1120_981538.HtM
BbS.okacop829.info/PoSt/1120_002137.HtM
BbS.okacop092.info/PoSt/1120_067335.HtM
BbS.okacop093.info/PoSt/1120_825017.HtM
BbS.okacop094.info/PoSt/1120_126284.HtM
BbS.okacop095.info/PoSt/1120_945898.HtM
BbS.okacop096.info/PoSt/1120_305002.HtM
BbS.okacop097.info/PoSt/1120_968249.HtM
BbS.okacop098.info/PoSt/1120_919149.HtM
BbS.okacop099.info/PoSt/1120_413486.HtM
BbS.okacop114.info/PoSt/1120_876305.HtM
BbS.okacop829.info/PoSt/1120_007168.HtM
BbS.okacop092.info/PoSt/1120_486431.HtM
BbS.okacop093.info/PoSt/1120_843590.HtM
BbS.okacop094.info/PoSt/1120_519410.HtM
BbS.okacop095.info/PoSt/1120_885818.HtM
BbS.okacop096.info/PoSt/1120_062258.HtM
BbS.okacop097.info/PoSt/1120_785014.HtM
BbS.okacop098.info/PoSt/1120_474457.HtM
BbS.okacop099.info/PoSt/1120_547110.HtM
BbS.okacop114.info/PoSt/1120_546360.HtM
BbS.okacop829.info/PoSt/1120_877690.HtM
BbS.okacop092.info/PoSt/1120_585242.HtM
BbS.okacop093.info/PoSt/1120_559539.HtM
BbS.okacop094.info/PoSt/1120_020124.HtM
BbS.okacop095.info/PoSt/1120_232922.HtM
BbS.okacop096.info/PoSt/1120_084180.HtM
BbS.okacop097.info/PoSt/1120_438635.HtM
BbS.okacop098.info/PoSt/1120_552035.HtM
BbS.okacop099.info/PoSt/1120_696134.HtM
BbS.okacop114.info/PoSt/1120_649740.HtM
BbS.okacop829.info/PoSt/1120_221561.HtM
BbS.okacop092.info/PoSt/1120_588913.HtM
BbS.okacop093.info/PoSt/1120_500870.HtM
BbS.okacop094.info/PoSt/1120_677079.HtM
BbS.okacop095.info/PoSt/1120_640859.HtM
BbS.okacop096.info/PoSt/1120_098135.HtM
BbS.okacop097.info/PoSt/1120_496776.HtM
BbS.okacop098.info/PoSt/1120_464902.HtM
BbS.okacop099.info/PoSt/1120_958463.HtM
BbS.okacop114.info/PoSt/1120_635322.HtM
BbS.okacop829.info/PoSt/1120_250786.HtM
BbS.okacop092.info/PoSt/1120_256223.HtM
BbS.okacop093.info/PoSt/1120_289447.HtM
BbS.okacop094.info/PoSt/1120_960064.HtM
BbS.okacop095.info/PoSt/1120_249669.HtM
BbS.okacop096.info/PoSt/1120_653864.HtM
BbS.okacop097.info/PoSt/1120_678776.HtM
BbS.okacop098.info/PoSt/1120_512568.HtM
BbS.okacop099.info/PoSt/1120_881553.HtM
BbS.okacop114.info/PoSt/1120_212049.HtM
BbS.okacop829.info/PoSt/1120_122389.HtM
BbS.okacop092.info/PoSt/1120_511772.HtM
BbS.okacop093.info/PoSt/1120_672717.HtM
BbS.okacop094.info/PoSt/1120_435078.HtM
BbS.okacop095.info/PoSt/1120_122942.HtM
BbS.okacop096.info/PoSt/1120_842879.HtM
BbS.okacop097.info/PoSt/1120_685820.HtM
BbS.okacop098.info/PoSt/1120_568714.HtM
BbS.okacop099.info/PoSt/1120_047391.HtM
BbS.okacop114.info/PoSt/1120_500571.HtM
BbS.okacop829.info/PoSt/1120_985062.HtM
BbS.okacop092.info/PoSt/1120_686328.HtM
BbS.okacop093.info/PoSt/1120_816686.HtM
BbS.okacop094.info/PoSt/1120_833159.HtM
BbS.okacop095.info/PoSt/1120_715828.HtM
BbS.okacop096.info/PoSt/1120_976082.HtM
BbS.okacop097.info/PoSt/1120_069209.HtM
BbS.okacop098.info/PoSt/1120_041561.HtM
BbS.okacop099.info/PoSt/1120_088870.HtM
BbS.okacop114.info/PoSt/1120_964462.HtM
BbS.okacop829.info/PoSt/1120_636013.HtM
