112.路径总和
【LetMeFly】112.路径总和:BFS + 更改节点的值
力扣题目链接:https://leetcode.cn/problems/path-sum/
给你二叉树的根节点 root
和一个表示目标和的整数 targetSum
。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum
。如果存在,返回 true
;否则,返回 false
。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22 输出:true 解释:等于目标和的根节点到叶节点路径如上图所示。
示例 2:
输入:root = [1,2,3], targetSum = 5 输出:false 解释:树中存在两条根节点到叶子节点的路径: (1 --> 2): 和为 3 (1 --> 3): 和为 4 不存在 sum = 5 的根节点到叶子节点的路径。
示例 3:
输入:root = [], targetSum = 0 输出:false 解释:由于树是空的,所以不存在根节点到叶子节点的路径。
提示:
- 树中节点的数目在范围
[0, 5000]
内 -1000 <= Node.val <= 1000
-1000 <= targetSum <= 1000
方法一:BFS + 更改节点的值
我们只需要BFS遍历一遍每个节点
同时,在遍历子节点的时候,直接将父节点的值加到子节点上
如果遍历到了叶子节点,并且叶子节点的值等于目标值,就返回true
全部遍历结束后,就返回false
- 时间复杂度$O(N)$,其中$N$是节点的个数,我们只需要遍历一遍每个节点即可
- 空间复杂度$O(N)$,注意这种方法修改了节点的原本的值。若题目要求不得修改原本的值,则在BSF的时候可以将节点和累计和(如
pair<TreeNode*, int>
)入队。但是空间复杂度不变。
AC代码
C++
1 |
|
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/125718939
112.路径总和
https://blog.letmefly.xyz/2022/07/11/LeetCode 0112.路径总和/