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

01.16

112.路径总和

思路

1.利用深搜遍历思想,找到叶子节点并逐层累加判断是否满足条件

或使用递归思想找到左右节点是否存在满足tar-root.val的节点.

总结

递归函数什么时候需要返回值?什么时候不需要返回值?这里总结如下三点:

  • 如果需要搜索整棵二叉树且不用处理递归返回值,递归函数就不要返回值。(这种情况就是本文下半部分介绍的113.路径总和ii)
  • 如果需要搜索整棵二叉树且需要处理递归返回值,递归函数就需要返回值。 (这种情况我们在236. 二叉树的最近公共祖先 (opens new window)中介绍)
  • 如果要搜索其中一条符合条件的路径,那么递归一定需要返回值,因为遇到符合条件的路径了就要及时返回。(本题的情况)

代码

    public boolean hasPathSum(TreeNode root, int targetSum) {int sum=0;return getSum(root,sum,targetSum);}public boolean getSum(TreeNode root,int sum,int targetSum) {if (root==null) return false;sum=sum+root.val;if (root.left==null && root.right==null) {if (sum==targetSum)return true;}else {if (root.left!=null && getSum(root.left,sum,targetSum)) return true;if (root.right!=null && getSum(root.right,sum,targetSum)) return true;}return false;}

    public boolean hasPathSum(TreeNode root, int sum) {if(root == null){return false;}if(root.left == null && root.right == null){return root.val == sum;}return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);}

113.路径总和ii

思路

回溯,最后需返还List<List<Integer>>,那么需要使用全局变量,需在递归函数中if (targetSum==0 && root.left==null &&root.right==null) 来添加一个List,那么只需在遍历节点时加入当前节点值即可,并在递归返回上一层时抛出这个值,因此需要使用栈来帮助。LinkendList存在add,removeLast方法,能够模仿栈的操作,而List不行。

总结

ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

代码

class Solution {LinkedList<List<Integer>> res=new LinkedList<>();LinkedList<Integer> path=new LinkedList<>();public List<List<Integer>> pathSum(TreeNode root, int targetSum) {recur(root,targetSum);return res;}public void recur(TreeNode root,int targetSum) {if (root==null) return;path.add(root.val);targetSum-=root.val;if (targetSum==0 && root.left==null &&root.right==null) res.add(path);recur(root.left,targetSum);recur(root.right,targetSum);path.removeLast();}
}

相关文章:

  • 广告投放场景中ABtest分析的评价、优化和决策建议
  • vs2022配置OpenCV测试
  • 注意!不清楚这些,2024上半年软考别轻易尝试!
  • 【好书推荐-第四期】《Go专家编程(第2版)》华为资深技术专家力作,第1版评分9.4,适合Go程序员面试
  • 使用WAF防御网络上的隐蔽威胁之SQL注入攻击
  • Android项目架构怎么做
  • 大数据Doris(五十六):SQL函数之地理位置函数
  • WEB前端人机交互导论实验-实训9 JavaScript
  • 逸学Docker【java工程师基础】3.3Docker安装nacos
  • Golang 替换数字卡码54题
  • 【总结】浅谈深度学习算法与硬件协同优化
  • Git提交规范
  • ❤ HbuildX使用以及快捷键
  • 【深度学习:Synthetic Training Data 】合成训练数据简介
  • 做数据缓存,Map 比List更具有优势
  • 【EOS】Cleos基础
  • 【React系列】如何构建React应用程序
  • Angularjs之国际化
  • Apache Pulsar 2.1 重磅发布
  • JavaScript HTML DOM
  • Javascript基础之Array数组API
  • JavaScript设计模式系列一:工厂模式
  • Laravel Telescope:优雅的应用调试工具
  • Redash本地开发环境搭建
  • SpringBoot几种定时任务的实现方式
  • Vue UI框架库开发介绍
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 区块链分支循环
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • AI算硅基生命吗,为什么?
  • C# - 为值类型重定义相等性
  • gunicorn工作原理
  • Hibernate主键生成策略及选择
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ​什么是bug?bug的源头在哪里?
  • #AngularJS#$sce.trustAsResourceUrl
  • #DBA杂记1
  • (10)ATF MMU转换表
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .Net Redis的秒杀Dome和异步执行
  • .net wcf memory gates checking failed
  • .NetCore 如何动态路由
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • /bin/rm: 参数列表过长"的解决办法