当前位置: 首页 > news >正文

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

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)这两道题和之前的所有路径那道题类似,都是递归+回溯的形式

http://www.cnnetsun.cn/news/484800.html

相关文章:

  • DeepSeek R1 简易指南:架构、本地部署和硬件要求
  • 终极降AI指南!这款能让你相见恨晚的论文降aigc神器,实测降ai效果立竿见影
  • 还在为AI率爆表发愁吗?这几款降ai率工具推荐,实测免费降低ai率只需三步,建议反复观看!
  • Flutter 持续数据流设计:为什么一定要用 BasicMessageChannel?
  • AI驱动的企业财务舞弊模式演化跟踪系统
  • CES 2026最酷笔记本电脑:可拆卸设计成为新趋势
  • CentOS7安装Mysql5.7(ARM64架构)
  • 80-02210-001 PCB模块
  • 7D-AI系列:Vibe Coding VS Spec Coding AI 编程的两种范式对比
  • 基于Python+Django的框架的青岛开发区芳华美容院管理系统毕设源码+文档+讲解视频
  • c盘应用程序怎么转移到d盘?无需重装,一键帮你迁移!
  • java----内部类(四种内部类详解)收藏这篇就够了
  • 崩溃了?2026知网AIGC检测高居62%!最强论文查重降重法揭秘,七天内AI率秒降20%内!
  • apisetschema.dll文件丢失找不到 打不开问题 免费下载方法分享
  • 强烈安利!继续教育必用TOP8 AI论文工具测评
  • 告别重复造轮子!MCP 协议科普:给大模型装上“USB-C”万能接口
  • Docker Compose UI:让容器管理告别命令行,小白也能轻松上手
  • 基于LOS算法+反步控制的水下航行器AUV UUV三维路径跟踪控制研究附Matlab代码
  • 2025年12月 GESP CCF编程能力等级认证Python四级真题
  • 从理论到实践:基于Llama的AI原生应用开发教程
  • conda虚拟环境备份与安装
  • Springboot劳务派遣人事系统gjfr3(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • MybatisPlus-快速入门
  • 2026年入局AI行业:普通人的机会在哪里?
  • 玫瑰克隆AI工具:深耕小红书生态的爆款创作赋能利器
  • GESP Python 编程一级教材之 10 掌握变量的创建及使用(教程含历年试题解析)
  • An Incremental Learning-Based Mechanism to Deploying Radio Map Estimation Models
  • 中商旅游一卡通——打造国内惠民旅游领先平台
  • ArcGIS大师之路500技---054字段顺序调整
  • vue基于springboot框架的在线求医问诊问药系统小程序_0gus2y33