LeetCode 437:二叉树路径总和III详解
问题描述
LeetCode 437. 路径总和 III 要求在一个二叉树中,统计所有路径的和等于给定目标值的路径数量。路径不需要从根节点开始,也不需要在叶子节点结束,但必须是从父节点指向子节点的方向。
解题思路
该问题可以通过深度优先搜索(DFS)结合前缀和的方法高效解决。核心思想是利用哈希表记录从根节点到当前节点的路径前缀和,通过检查当前前缀和与目标值的差值是否存在哈希表中,快速判断是否存在符合条件的路径。
方法一:双重递归
采用双重递归的方式,外层递归遍历每个节点作为路径的起点,内层递归计算以当前节点为起点的所有路径和。
class Solution:
def pathSum(self, root: TreeNode, targetSum: int) -> int:
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) + self.pathSum(root.left, targetSum) + self.pathSum(root.right, targetSum)
- 时间复杂度:O(n^2),最坏情况下每个节点被访问多次。
- 空间复杂度:O(n),递归栈的深度。
方法二:前缀和优化
利用前缀和的思想,将路径和问题转化为查找前缀和之差等于目标值的问题。通过哈希表记录前缀和的出现次数,避免重复计算。
class Solution:
def pathSum(self, root: TreeNode, targetSum: int) -> int:
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),每个节点仅被访问一次。
- 空间复杂度:O(n),哈希表和递归栈的空间。
关键点分析
- 前缀和的应用:通过记录从根节点到当前节点的路径和,可以快速判断是否存在满足条件的子路径。
- 哈希表的维护:在递归过程中动态更新哈希表,确保仅统计当前路径的前缀和。
- 回溯思想:在递归返回时恢复哈希表的状态,避免对其他路径的干扰。
边界条件
- 空树直接返回0。
- 节点值为负数或目标值为负数时,算法仍然有效。
- 路径可以是单节点,只要其值等于目标值。
复杂度对比
| 方法 | 时间复杂度 | 空间复杂度 | |----------------|------------|------------| | 双重递归 | O(n^2) | O(n) | | 前缀和优化 | O(n) | O(n) |
总结
LeetCode 437 是一个典型的树形动态规划问题,通过前缀和优化可以将时间复杂度从O(n^2)降低到O(n)。理解前缀和的应用以及哈希表的维护是解决此类问题的关键。
BbS.okacop030.info/PoSt/1120_723200.HtM
BbS.okacop031.info/PoSt/1120_904390.HtM
BbS.okacop032.info/PoSt/1120_743539.HtM
BbS.okacop033.info/PoSt/1120_904615.HtM
BbS.okacop034.info/PoSt/1120_654334.HtM
BbS.okacop035.info/PoSt/1120_447397.HtM
BbS.okacop036.info/PoSt/1120_834460.HtM
BbS.okacop037.info/PoSt/1120_119461.HtM
BbS.okacop038.info/PoSt/1120_259655.HtM
BbS.okacop039.info/PoSt/1120_028050.HtM
BbS.okacop040.info/PoSt/1120_594800.HtM
BbS.okacop041.info/PoSt/1120_572586.HtM
BbS.okacop042.info/PoSt/1120_397875.HtM
BbS.okacop043.info/PoSt/1120_222903.HtM
BbS.okacop044.info/PoSt/1120_808669.HtM
BbS.okacop045.info/PoSt/1120_391108.HtM
BbS.okacop046.info/PoSt/1120_652735.HtM
BbS.okacop047.info/PoSt/1120_969837.HtM
BbS.okacop048.info/PoSt/1120_571062.HtM
BbS.okacop049.info/PoSt/1120_824905.HtM
BbS.okacop040.info/PoSt/1120_214223.HtM
BbS.okacop041.info/PoSt/1120_965505.HtM
BbS.okacop042.info/PoSt/1120_245206.HtM
BbS.okacop043.info/PoSt/1120_520773.HtM
BbS.okacop044.info/PoSt/1120_914661.HtM
BbS.okacop045.info/PoSt/1120_094573.HtM
BbS.okacop046.info/PoSt/1120_534434.HtM
BbS.okacop047.info/PoSt/1120_461960.HtM
BbS.okacop048.info/PoSt/1120_480170.HtM
BbS.okacop049.info/PoSt/1120_571931.HtM
BbS.okacop040.info/PoSt/1120_462195.HtM
BbS.okacop041.info/PoSt/1120_063895.HtM
BbS.okacop042.info/PoSt/1120_157229.HtM
BbS.okacop043.info/PoSt/1120_058168.HtM
BbS.okacop044.info/PoSt/1120_057427.HtM
BbS.okacop045.info/PoSt/1120_602771.HtM
BbS.okacop046.info/PoSt/1120_129756.HtM
BbS.okacop047.info/PoSt/1120_321236.HtM
BbS.okacop048.info/PoSt/1120_785672.HtM
BbS.okacop049.info/PoSt/1120_897362.HtM
BbS.okacop040.info/PoSt/1120_876313.HtM
BbS.okacop041.info/PoSt/1120_267904.HtM
BbS.okacop042.info/PoSt/1120_423539.HtM
BbS.okacop043.info/PoSt/1120_047987.HtM
BbS.okacop044.info/PoSt/1120_313040.HtM
BbS.okacop045.info/PoSt/1120_180096.HtM
BbS.okacop046.info/PoSt/1120_553539.HtM
BbS.okacop047.info/PoSt/1120_483171.HtM
BbS.okacop048.info/PoSt/1120_305480.HtM
BbS.okacop049.info/PoSt/1120_892346.HtM
BbS.okacop040.info/PoSt/1120_679815.HtM
BbS.okacop041.info/PoSt/1120_354072.HtM
BbS.okacop042.info/PoSt/1120_179194.HtM
BbS.okacop043.info/PoSt/1120_507074.HtM
BbS.okacop044.info/PoSt/1120_038420.HtM
BbS.okacop045.info/PoSt/1120_713646.HtM
BbS.okacop046.info/PoSt/1120_893758.HtM
BbS.okacop047.info/PoSt/1120_380631.HtM
BbS.okacop048.info/PoSt/1120_702027.HtM
BbS.okacop049.info/PoSt/1120_578948.HtM
BbS.okacop040.info/PoSt/1120_242198.HtM
BbS.okacop041.info/PoSt/1120_800700.HtM
BbS.okacop042.info/PoSt/1120_849665.HtM
BbS.okacop043.info/PoSt/1120_389459.HtM
BbS.okacop044.info/PoSt/1120_523351.HtM
BbS.okacop045.info/PoSt/1120_411492.HtM
BbS.okacop046.info/PoSt/1120_334824.HtM
BbS.okacop047.info/PoSt/1120_550587.HtM
BbS.okacop048.info/PoSt/1120_400294.HtM
BbS.okacop049.info/PoSt/1120_171675.HtM
BbS.okacop040.info/PoSt/1120_791791.HtM
BbS.okacop041.info/PoSt/1120_482094.HtM
BbS.okacop042.info/PoSt/1120_334232.HtM
BbS.okacop043.info/PoSt/1120_944465.HtM
BbS.okacop044.info/PoSt/1120_755207.HtM
BbS.okacop045.info/PoSt/1120_704161.HtM
BbS.okacop046.info/PoSt/1120_803366.HtM
BbS.okacop047.info/PoSt/1120_022030.HtM
BbS.okacop048.info/PoSt/1120_360709.HtM
BbS.okacop049.info/PoSt/1120_230793.HtM