当前位置:网站首页>Leetcode-112:路径总和
Leetcode-112:路径总和
2022-07-03 09:22:00 【ITSOK_U】
112. 路径总和
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。
如果存在,返回 true ;否则,返回 false 。叶子节点是指没有子节点的节点。
这道题和题257. 二叉树的所有路径十分类似,代码也相似。
深度优先(O(N),O(N))
在本题使用深度优先的话可以使用前序递归来模拟实现,但是在递归中需要处理的是每个节点的路径和的计算要确保不对其它的节点路径和计算造成影响,所以使用递归的话在其回溯过程会需要处理那些多余的叶节点。
如在上述的路径和计算中,第一条叶子节点的路径和计算为1+2+4,如果此时不满足要求,则需要进行回溯,所以要更新已有结果为1+2,使用递归的话可以完美的解决这种问题,如下面代码中的return就可以实现有效的回溯。
if(root->left == nullptr && root->right == nullptr){
if(num == target) falg = true;
// 否则继续递归
return;
}
具体解题代码如下:
class Solution {
public:
void findPath(TreeNode* root,int num,int target,bool &falg){
// 新加入了节点更新路径和
num += root->val;
// 到达叶子节点
if(root->left == nullptr && root->right == nullptr){
// 满足求解条件,结果标志为真
if(num == target){
falg = true;
}
// 否则继续递归
return;
}
// 左子树递归
if(root->left) findPath(root->left,num,target,falg);
// 右子树递归
if(root->right) findPath(root->right,num,target,falg);
}
bool hasPathSum(TreeNode* root, int targetSum) {
// 根节点为空,返回false
if(root == nullptr) return false;
// falg用来标记求解结果
bool falg = false;
findPath(root,0,targetSum,falg);
return falg;
}
};
广度优先(O(N),O(N))
使用广度优先的话就是模拟一次层序遍历。不过相比于普通的打印路径之类的求解,此时我们需要维护一个各个节点已有的路径和队列。如下图所示。我们的路径和队列是和树节点队列一一位置对应的,也就是说,与树节点队列相同位置的路径和队列的值就是到该树节点的路径和。
class Solution {
public:
bool hasPathSum(TreeNode* root, int targetSum) {
// 空树直接返回false
if(root == nullptr) return false;
// 初始化广度遍历的树节点队列
queue<TreeNode*> que;
queue<int> num;
que.push(root);
num.push(root->val);
// 队列不为空则节点未处理完
while(!que.empty()){
// 取出树节点队列以及路径和队列的首元素
TreeNode* node = que.front();
int res=num.front();
que.pop();
num.pop();
// 如果到了叶子节点而且路径和满足要求则直接跳出遍历,返回true
if(node->left==nullptr && node->right==nullptr && res==targetSum)
return true;
if(node->left){
que.push(node->left);
// 下一层节点入队,并将其对应的节点路径和存储
num.push(node->left->val + res);
}
if(node->right){
que.push(node->right);
// 下一层节点入队,并将其对应的节点路径和存储
num.push(node->right->val + res);
}
}
// 节点处理完仍然没有找到加和为targetSum的路径,返回false
return false;
}
};
边栏推荐
- 2312. Selling wood blocks | things about the interviewer and crazy Zhang San (leetcode, with mind map + all solutions)
- QT self drawing button with bubbles
- RESNET code details
- 3.1 Monte Carlo Methods & case study: Blackjack of on-Policy Evaluation
- Wireshark use
- Dynamic layout management
- CV learning notes - image filter
- CV learning notes convolutional neural network
- Problems encountered when MySQL saves CSV files
- My openwrt learning notes (V): choice of openwrt development hardware platform - mt7688
猜你喜欢
Openeuler kernel technology sharing - Issue 1 - kdump basic principle, use and case introduction
CV learning notes convolutional neural network
Yocto Technology Sharing Phase 4: Custom add package support
CV learning notes - image filter
03 fastjason solves circular references
Serial communication based on 51 single chip microcomputer
LeetCode 面试题 17.20. 连续中值(大顶堆+小顶堆)
One click generate traffic password (exaggerated advertisement title)
pycharm 无法引入自定义包
Notes on C language learning of migrant workers majoring in electronic information engineering
随机推荐
My 4G smart charging pile gateway design and development related articles
4G module designed by charging pile obtains signal strength and quality
CV learning notes alexnet
03 FastJson 解决循环引用
2021-11-11 standard thread library
Opencv notes 17 template matching
CV learning notes - clustering
pycharm 无法引入自定义包
Wireshark use
CV learning notes convolutional neural network
Opencv Harris corner detection
STM32 general timer 1s delay to realize LED flashing
Toolbutton property settings
[keil5 debugging] warning:enumerated type mixed with other type
openEuler kernel 技术分享 - 第1期 - kdump 基本原理、使用及案例介绍
Opencv note 21 frequency domain filtering
[combinatorics] Introduction to Combinatorics (combinatorial idea 3: upper and lower bound approximation | upper and lower bound approximation example Remsey number)
2312. Selling wood blocks | things about the interviewer and crazy Zhang San (leetcode, with mind map + all solutions)
SCM is now overwhelming, a wide variety, so that developers are overwhelmed
El table X-axis direction (horizontal) scroll bar slides to the right by default