news 2026/6/15 19:47:29

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

作者头像

张小明

前端开发工程师

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/6/15 13:34:39

RK3588+kylin V10安装docker

检查内核是否支持docker 方法&#xff1a;工具分享&#xff1a;检测内核配置是否支持Docker等容器 (1)检查卸载老版本Docker sudo apt-get remove docker docker-engine docker.io containerd runc (2)安装Docker依赖 sudo apt-get install ca-certificates curl gnupg lsb…

作者头像 李华
网站建设 2026/6/15 16:27:02

从Mermaid到Word:一个提升文档工作流效率的在线工具

在日常开发、技术文档撰写或学术写作中&#xff0c;我们常常遇到一个共通的痛点&#xff1a;如何将AI生成的内容&#xff0c;或使用特定语法&#xff08;如Mermaid图表、LaTeX公式&#xff09;编写的片段&#xff0c;高效、准确地转换为可直接用于分享、发布或提交的Word文档。…

作者头像 李华
网站建设 2026/6/15 13:47:41

【AI】各类型开源模型排行

开源翻译模型 Top5 截至 2025 年第四季度的公开评测与赛果&#xff0c;综合 WMT-25、TransBench 以及社区人工打分&#xff0c;开源翻译模型 Top5 如下&#xff08;按“多语种平均 BLEURT COMET 人工分”排序&#xff0c;括号内为亮点语向&#xff09;&#xff1a;Tencent Hun…

作者头像 李华
网站建设 2026/6/15 13:41:31

java失业求职记录

这是小红书上一位上海的Java程序员失业想转行的分享贴。 Java开发的就业市场正在经历结构性调整&#xff0c;竞争日益激烈 传统纯业务开发岗位&#xff08;如仅完成增删改查业务的后端工程师&#xff09;的需求&#xff0c;特别是入门级岗位&#xff0c;正显著萎缩。随着企业…

作者头像 李华