news 2026/4/16 0:17:11

代码随想录刷题——二叉树篇(十二)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码随想录刷题——二叉树篇(十二)

112. 路径总和

递归法:

class Solution{ public: bool sumPath(TreeNode* node,int count){ # 如果该节点是叶子节点且count被减到0了,那么就返回true if(!node->left&&!node->right&&count==0) return true; # 如果该节点是叶子节点且count不为0,那么就返回false if(!node->left&&!node->right) return false; # 对当前节点进行操作,如果左右子节点存在,继续判断 if(node->left){ if(sumPath(node->left,count-node->left->val)) return true; } if(node->right){ if(sumPath(node->right,count-node->right->val)) return true; } # 左右子节点都判断完了没有返回true,那就是false return false; } bool hasPathSum(TreeNode* root, int targetSum) { if(!root) return false; return sumPath(root,targetSum-root->val); } };

迭代法:

class Solution{ public: bool hasPathSum(TreeNode* root,int targetSum){ if(!root) return false; # 用pair存储 该节点 和 到该节点的路径值的和 两个信息 queue<pair<TreeNode*,int>> qu; qu.push(root,root->val); while(!qu.empty()){ pair<TreeNode*,int> node=qu.front(); qu.pop(); # 和递归类似,如果是叶子节点且count被减到0 if(!node.first->left&&!node.first->right&&node.second==targetSum) return true; # 当前节点的左右子节点操作 if(node.first->left) qu.push(pair<TreeNode*,int>(node.first->left,node.second+node.first->left->val)); if(node.first->right) qu.push(pair<TreeNode*,int>(node.first->right,node.second+node.first->right->val)); } return false; } };

113. 路径总和 II

递归法:

class Solution{ public: void sumPath(TreeNode* node,int target,vector<vector<int>>& ans,vector<int>& vec){ if(!node->left&&!node->right&&target==0){ ans.push_back(vec); return ; } if(!node->left&&!node->right) return ; if(node->left){ vec.push_back(node->left->val); sumPath(node->left,target-node->left->val,ans,vec); vec.pop_back(); } if(node->right){ vec.push_back(node->right->val); sumPath(node->right,target-node->right->val,ans,vec); vec.pop_back(); } return ; } vector<vector<int>> pathSum(TreeNode* root, int targetSum) { vector<vector<int>> ans; if(!root) return ans; vector<int> vec; vec.push_back(root->val); sumPath(root,targetSum-root->val,ans,vec); return ans; } };

其他:

(1)再看递归三部曲:

a.确定参数返回类型(如果需要遍历整个二叉树,可以不需要返回值,如果需要操作递归返回值,就需要返回值)

b.确定终止条件(如果在叶子节点终止,就可以通过条件判断避免遍历空节点

c.确定单层递归逻辑(最外层区域要如何操作和return

(2)113题中的回溯可以用全局变量实现,我的写法里是用的引用变量,也可以用全局变量来实现
(3)这两道题和之前的所有路径那道题类似,都是递归+回溯的形式

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 5:08:51

Linux 命令行实战训练营(

Linux 命令行实战训练营&#xff08;Linux Command Line Bootcamp&#xff09;课程基本信息- 发布时间&#xff1a;2026年1月 - 格式与规格&#xff1a;MP4 格式 | 视频 1920x1080 分辨率 - 语言&#xff1a;英语 - 时长&#xff1a;28 节课&#xff08;总计 4 小时 &#xff…

作者头像 李华
网站建设 2026/4/3 3:33:13

【NLP】Hugging Face使用指南

文章目录一、Hugging Face介绍二、加载并使用预训练模型2.1 查找预训练模型2.2 实际案例2.2.1 调取预训练模型2.2.2 如何在具体的推理任务中使用预训练模型&#xff1f;2.3 如何在训练前就判定好哪些模型适用于实际任务&#xff1f;三、词嵌入工具与词嵌入模型3.1 调用分词器&a…

作者头像 李华
网站建设 2026/4/13 5:30:03

提示工程架构师处理多语言场景的9个经验之谈,新手必看!

提示工程架构师处理多语言场景的9个经验之谈&#xff1a;新手必看的避坑指南 在全球化浪潮下&#xff0c;多语言场景已成为提示工程的“必修课”——从跨境电商的产品描述生成&#xff0c;到国际客户的智能客服&#xff0c;再到多语言文档翻译&#xff0c;几乎所有需要与全球用…

作者头像 李华
网站建设 2026/4/15 6:19:17

python---正则表达式

一、基本介绍正确的, 符合特定规则的 字符串. 英文名叫: Regular Expression, 简称叫: re, RegExp。主要用于 校验数据.细节:1. 学正则, 主要是学正则的规则. 即: 哪个符号表示什么含义.2. 关于正则, 要求很简单, 只要能用我们讲的规则, 看懂别人写的 式子, 且能简单修改即可, …

作者头像 李华
网站建设 2026/4/14 1:11:13

亲测好用自考必看TOP10AI论文工具

亲测好用自考必看TOP10AI论文工具 一、不同维度核心推荐&#xff1a;10款AI工具各有所长 在自考论文写作过程中&#xff0c;从选题、开题到初稿撰写、查重降重&#xff0c;再到最终排版&#xff0c;每一个环节都离不开高效的工具支持。而不同的AI论文工具在功能覆盖和适用场景…

作者头像 李华