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

代码随想录 112.路径总和

一、递归函数什么时候需要返回值?什么时候不需要返回值?

1.如果需要搜索整棵二叉树且不用处理递归返回值,递归函数就不要返回值

2.如果需要搜索整棵二叉树且需要处理递归返回值,递归函数就需要返回值

3.如果需要搜索其中一条符合条件的路径,那么递归一定需要返回值,因为遇到符合条件的路径了就要及时返回(本题的情况)。

方法一:深搜递归(本题前中后序都可以,因为中节点没有处理逻辑)

1.确定递归函数的参数和返回值类型。

(1)参数:二叉树的根节点和一个计数器(计算二叉树的一条边之和是否正好是目标和,int类型)。

(2)返回值类型:因为要找一条符合条件的路径,因此需要返回值。返回值类型为bool类型。

boolean hasPathSum(TreeNode root, int targetSum)

2.确定终止条件:如果累加然后判断结果是否等于目标和,代码会比较麻烦;可以采用递减的逻辑,让计数器count初始为目标和,然后每次减去遍历路径节点上的数值。

(1)如果count == 0,且到了叶子节点,说明找到了目标和;

(2)如果遍历到了叶子节点,count不为0,说明没找到。

    if (root.left == null && root.right == null) {return targetSum == 0;}

3.确定单层递归的逻辑:求每条路径的总和,需要后撤重新找一条路径,因此需要回溯。

        targetSum -= root.val;if (root.left != null) {boolean left = hasPathSum(root.left, targetSum);if (left) {      // 已经找到,提前返回return true;}}if (root.right != null) {boolean right = hasPathSum(root.right, targetSum);if (right) {     // 已经找到,提前返回return true;}}return false;

附代码:

    class Solution {public boolean hasPathSum(TreeNode root, int targetSum) {if(root == null){return false;}targetSum -= root.val;if(root.left == null && root.right == null){return targetSum == 0;}if(root.left != null){boolean left = hasPathSum(root.left,targetSum);if(left){ //已经找到,提前返回return true;}}if(root.right != null){boolean right = hasPathSum(root.right,targetSum);if(right){ //已经找到,提前返回return true;}}return false;}
}

方法二:用栈模拟递归迭代。将节点压入栈时,需要把该节点以及该节点的路径数值都记录下来。

http://www.dtcms.com/a/512588.html

相关文章:

  • 51单片机基础-定时器中断
  • xtuoj 两个数
  • Android Studio新手开发第二十六天
  • 中国平安网站建设成都网站建设易维达好
  • 继保:对于线路两侧的电流互感器型号系数选取
  • Redis分布式集群:从分区算法到扩容实战
  • AI大模型:(二)1.6 DeepSeek-OCR部署尝鲜
  • 在昇腾NPU上跑Llama大模型:从零开始的真实测试之旅
  • 直播类网站开发wordpress 图片自动分页
  • JADX下载和安装图解教程(附安装包)
  • 矽塔 SA8203 2.5A可调过流保护 输入耐压36V 过压/过流保护芯片
  • 网站开发饼图样式wordpress 如何登陆地址
  • 工业相机 “即插即用” vs 采集卡依赖
  • wordpress手机视频播放器免费seo营销软件
  • 【系统分析师】预测试卷一:论文及写作要点(包括对应素材和论文案例)
  • 私有云不私有?Nextcloud+cpolar让文件随身走
  • 诺基亚官方网站wordpress站点进入时弹窗
  • 网站建设运营合作合同外链代发工具
  • 重庆江北网站建设18款app软件免费下载百度
  • wordpress 多语言 站点动态ip做网站影响seo吗
  • 河南建设网站官网怎么用微信官方网站做二维码
  • JSTS ,JSXTSX的区别与联系(前端react第一篇)
  • 电子商务网站建设以什么为核心公司网站能自己做吗
  • 股指期货与股票的区别是什么?
  • 天津网站建设学习温州建站模板搭建
  • 兰州网站优化服务个性化网站建设费用
  • Nginx负载均衡:高性能流量调度指南
  • [人工智能-大模型-35]:模型层技术 - Transformer神经网络结构与其他类型的神经网络结构(CNN、RNN)的对比
  • Blender微细节纹理材质模型资产包 Micro-Details Premium Asset Pack
  • 解释Linux 系统中ls -l命令的输出