news 2026/2/25 15:06:05

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

作者头像

张小明

前端开发工程师

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/2/25 1:14:23

二分猜答案

二分前后缀分解lc786二分查找分数值范围&#xff0c;统计小于等于中间值的分数个数&#xff0c;定位第k小的素数分数并返回#include <vector> using namespace std;class Solution { private:vector<int> arr;int n, a, b; public:vector<int> kthSmallestPr…

作者头像 李华
网站建设 2026/2/24 18:49:40

信使(msner)(信息学奥赛一本通- P1376)四种做法

【题目描述】战争时期&#xff0c;前线有n个哨所&#xff0c;每个哨所可能会与其他若干个哨所之间有通信联系。信使负责在哨所之间传递信息&#xff0c;当然&#xff0c;这是要花费一定时间的&#xff08;以天为单位&#xff09;。指挥部设在第一个哨所。当指挥部下达一个命令后…

作者头像 李华
网站建设 2026/2/23 1:50:20

Nomad ZBrush:GSC 模型制作教程

Nomad & ZBrush&#xff1a;GSC 模型制作教程课程基本信息- 发布时间&#xff1a;2026年1月 - 类别&#xff1a;设计类 - 格式与规格&#xff1a;MP4 格式 1920x1080 分辨率 - 语言&#xff1a;英语 - 时长&#xff1a;15小时 - 大小&#xff1a;22GB - 副标题&#xff1…

作者头像 李华
网站建设 2026/2/17 17:46:57

TOTOLINK EX200存在未修复固件漏洞可被完全远程接管

CERT协调中心(CERT/CC)披露了影响TOTOLINK EX200无线信号扩展器的未修复安全漏洞详情&#xff0c;该漏洞可能允许经过身份验证的远程攻击者完全控制设备。该漏洞编号为CVE-2025-65606(CVSS评分&#xff1a;暂无)&#xff0c;被描述为固件上传错误处理逻辑中的缺陷&#xff0c;可…

作者头像 李华
网站建设 2026/2/24 12:51:08

Ring推出Fire Watch功能,利用家庭摄像头追踪野火威胁

洛杉矶大火一年后&#xff0c;亚马逊Ring安防服务宣布推出名为Fire Watch的新功能&#xff0c;旨在减轻未来野火风险。Fire Watch与CES 2026同期发布&#xff0c;是Ring应用程序Neighbors社区安全更新板块的新功能&#xff0c;计划今年春季在全国范围内推出。Fire Watch依托Wat…

作者头像 李华
网站建设 2026/2/24 14:30:19

机器海龟游向环保使命:仿生技术守护珊瑚礁

在自然环境中与海龟一起游泳是一种令人敬畏的体验。这些温和的生物以其深思熟虑且小心的鳍状肢划水方式在水下世界中航行&#xff0c;观看起来完全令人着迷。这是一种独特的运动方式——当我在CES 2026展会现场看到Beatbot公司的RoboTurtle在水箱中游泳时&#xff0c;我立刻意识…

作者头像 李华