437. 路径总和III
分析
-
使用前缀和优化路径求和
- 前缀和定义:到当前节点的路径和(包括当前节点)
- 公式:假设当前路径的前缀和为
cur
,目标和为targetSum
,那么我们需要寻找路径的前缀和cur - targetSum
- 若前缀和
cur - targetSum
存在,说明存在一条路径满足路径和等于targetSum
- 若前缀和
-
具体步骤
- 使用哈希表
count
存储前缀和及其出现的次数:count[0] = 1
初始化,表示路径和为0
的路径有1
条(即从根节点开始时)
- 深度优先搜索(DFS)遍历树的每个节点,维护当前路径的前缀和:
- 更新当前节点的前缀和
cur
- 检查是否存在路径满足
cur - targetSum
- 将当前路径的前缀和存入哈希表
- 递归遍历左右子树
- 回溯时,删除当前节点对前缀和的贡献(将
count[cur]--
)
- 更新当前节点的前缀和
- 使用哈希表
时间复杂度
总时间复杂度 O(n)
空间复杂度
空间复杂度为 O(h)
C++代码
|
|