今天是我坚持写题解的第 55 天!

题目描述(Medium)
给定一个二叉树的根节点 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]
-10^9 <= Node.val <= 10^9
-1000 <= targetSum <= 1000复制
链接:https://leetcode-cn.com/problems/path-sum-iii
方法、前缀和
今天这道题我们可以使用前缀和来求解,比如,给定数据为:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8
,对应的二叉树及其前缀和为:

有了前缀和,我们只要在每一条路径上求解:两个节点之差等于 targetSum
,即可。
为了更快速的找到某个数值在路径中是否出现过,我们可以使用哈希表记录路径中每个数值出现的次数,比如,上图中哈希表中记录了 10
这个数值,当遍历到 18
时,发现哈希表中有 18 - 8 = 10
,总次数加上 10
出现的次数即可。
另外,为了处理包含根节点的情况,我们需要在哈希表中存储一个 (0,1)
的键值对。
而且,我们并不需要一开始就把前缀和树计算出来,我们可以边遍历边计算,这里使用回溯来处理。
请看代码:
class Solution {
int ans = 0;
public int pathSum(TreeNode root, int targetSum) {
// 记录路径中某个前缀和出现的次数
Map<Integer, Integer> map = new HashMap<>();
// 防止包含根节点的时候找不到
map.put(0, 1);
// 开始搜索
dfs(root, map, 0, targetSum);
// 返回值
return ans;
}
private void dfs(TreeNode node, Map<Integer, Integer> map, int currSum, int targetSum) {
// 递归退出条件
if (node == null) {
return;
}
// 判断是否存在符合条件的前缀和
currSum += node.val;
ans += map.getOrDefault(currSum - targetSum, 0);
// 将当前前缀和记录下来
map.put(currSum, map.getOrDefault(currSum, 0) + 1);
// 继续往下递归
dfs(node.left, map, currSum, targetSum);
dfs(node.right, map, currSum, targetSum);
// 回溯,恢复状态
map.put(currSum, map.getOrDefault(currSum, 0) - 1);
}
}复制
时间复杂度:,每个节点只遍历一次。 空间复杂度:,递归栈占用的空间与树的高度成正比,这里没说是平衡二叉树,所以并不一定是 。map占用的空间为不同数值的前缀和,可以理解为与 成正比。
运行结果如下:

最后
如果对你有帮助,请点个赞吧,谢谢^^
也可以关注我,每日分享题解,一起刷题,一起拿全家桶。
文章转载自彤哥来刷题啦,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
2025年4月中国数据库流行度排行榜:OB高分复登顶,崖山稳驭撼十强
墨天轮编辑部
2265次阅读
2025-04-09 15:33:27
数据库国产化替代深化:DBA的机遇与挑战
代晓磊
1045次阅读
2025-04-27 16:53:22
2025年3月国产数据库大事记
墨天轮编辑部
958次阅读
2025-04-03 15:21:16
2025年3月国产数据库中标情况一览:TDSQL大单622万、GaussDB大单581万……
通讯员
657次阅读
2025-04-10 15:35:48
数据库,没有关税却有壁垒
多明戈教你玩狼人杀
524次阅读
2025-04-11 09:38:42
国产数据库需要扩大场景覆盖面才能在竞争中更有优势
白鳝的洞穴
507次阅读
2025-04-14 09:40:20
最近我为什么不写评论国产数据库的文章了
白鳝的洞穴
465次阅读
2025-04-07 09:44:54
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
419次阅读
2025-04-17 17:02:24
天津市政府数据库框采结果公布,7家数据库产品入选!
通讯员
396次阅读
2025-04-10 12:32:35
2025年4月国产数据库中标情况一览:4个千万元级项目,GaussDB与OceanBase大放异彩!
通讯员
395次阅读
2025-04-30 15:24:06