【Leetcode学习笔记】路径总和

embedded/2024/9/24 3:33:19/

【题目描述】给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。
在这里插入图片描述
输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。


本题难度标记为简单,但是递归思想总是让我头疼,每次都要调试看到一步步的过程才清晰明了。


ACM模式代码

#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <algorithm>
#include <stack>using namespace std;struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};class Solution {
public:bool backtracking(TreeNode* root, int target){if(root->left == nullptr && root->right == nullptr && target == 0){return true;}if(root->left == nullptr && root->right == nullptr && target != 0){return false;}if(root->left != nullptr){if(backtracking(root->left, target-root->left->val) == true){return true;}}if(root->right != nullptr){if(backtracking(root->right, target-root->right->val) == true){return true;}       }return false;}bool hasPathSum(TreeNode* root, int targetSum) {if(root == nullptr) return false;return backtracking(root, targetSum-root->val);}
};int main() {TreeNode* root = new TreeNode(5);TreeNode* node1 = new TreeNode(4);TreeNode* node2 = new TreeNode(8);TreeNode* node3 = new TreeNode(11);TreeNode* node4 = new TreeNode(13);TreeNode* node5 = new TreeNode(4);TreeNode* node6 = new TreeNode(7);TreeNode* node7 = new TreeNode(2);TreeNode* node8 = new TreeNode(1);root->left = node1;root->right = node2;node1->left = node3;node2->left = node4;node2->right = node5;node3->left = node6;node3->right = node7;node5->right = node1;Solution solution;bool result = solution.hasPathSum(root, 22);std::cout << "Has path sum 22: " << (result ? "true" : "false") << std::endl;// Clean updelete root->left->left->left;delete root->left->left->right;delete root->left->left;delete root->left;delete root->right->right->right;delete root->right->right;delete root->right->left;delete root->right;delete root;return 0;
}
  1. 创建示例,需要手动建立节点之间的关系。
  2. 要清楚递归函数的返回值,本题中是bool类型,应当时刻注意传递给上一级的是true或false,如果某一条完整路径返回了true,本函数也将提前结束。
  3. 要清楚传入参数,第二个参数是一个统计值,进到递归函数的第一步就要判断该值是否为零,所以尤其需要注意main函数传入初始参数。

http://www.ppmy.cn/embedded/109909.html

相关文章

使用Selenium WebDriver来检测网页上的坏链接

什么是坏链接? 坏链接是指那些不可达的链接或URL,它们可能是由于某些服务器错误而导致无法访问。 一个URL通常会有一个有效的状态码2xx。对于无效的请求,HTTP状态码是4xx(客户端错误)或5xx(服务器端错误)。我们通常需要点击链接来确认它是否工作,否则很难确定。为什么…

LeetCode之哈希表

383. 赎金信 class Solution {public boolean canConstruct(String ransomNote, String magazine) {// 创建一个 HashMap 来存储 magazine 中字符出现的次数Map<Character, Integer> map new HashMap<>();// 遍历 magazine 字符串&#xff0c;将每个字符及其出现…

python转换并提取pdf文件中的图片

#安装fitz包 pip install pymupdf 脚本如下所示&#xff1a; import fitz import re import os import time import sysarguments sys.argvfor arg in arguments:print(arg)def file_name_list(base_dir):for i, j, k in os.walk(base_dir):name [i.replace(.pdf, ) for i …

喜报! 炼石入选中国信通院《数据安全产业技术产品服务全景图》

近日&#xff0c;在2024中国国际大数据产业博览会“数据安全产业发展”交流活动上&#xff0c;中国信息通信研究院安全研究所副所长魏薇发布了《数据安全产业技术产品服务全景图》&#xff08;以下简称“全景图”&#xff09;。全景图从数据安全产业的概念和内涵出发&#xff0…

Java中的配置文件

员工管理的增删改查功能已开发完成&#xff0c;但在我们所开发的程序中还一些小问题&#xff0c;下面就来分析一下当前案例中存在的问题以及如何优化解决。 1.1 参数配置化 在之前编写的程序中进行文件上传时&#xff0c;需要调用AliOSSUtils工具类&#xff0c;将文件上传到阿…

C++mutable

文章目录 Claude 讲解基本用法mutable的常见用途注意事项 ChatGpt 讲解1. 基本概念2. 使用示例解释&#xff1a; 3. 适用场景4. 注意事项 lambda 讲解基本语法示例捕获方式使用场景 mutable 和 labmda 一起使用代码&#xff1a;代码分析&#xff1a;输出结果&#xff1a; 在C编…

uniapp个人健康预警管理系统 微信小程序的设计与实现 38vk1

目录 博主介绍技术栈系统设计&#x1f31f;文末获取源码数据库&#x1f31f;具体实现截图后端前端java类核心代码部分展示可行性论证个人心得系统测试操作可行性源码获取详细视频演示 博主介绍 &#x1f447;&#x1f3fb; 博主介绍&#xff1a;&#x1f447;&#x1f3fb; 专…

PyTorch自动混合精度训练

torch.cuda.amp.GradScaler 是 PyTorch 中的一个用于自动混合精度&#xff08;Automatic Mixed Precision, AMP&#xff09;训练的工具。AMP 允许在训练深度学习模型时动态切换浮点数的精度&#xff08;例如&#xff0c;使用半精度浮点数 float16 而非 float32&#xff09;&…