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

513. 找树左下角的值-day16

本地要找出树的最后一行找到最左边的值。此时大家应该想起用层序遍历是非常简单的了,反而用递归的话会比较难一点。

我们依然还是先介绍递归法。

咋眼一看,这道题目用递归的话就就一直向左遍历,最后一个就是答案呗?

没有这么简单,一直向左遍历到最后一个,它未必是最后一行啊。

我们来分析一下题目:在树的最后一行找到最左边的值。

首先要是最后一行,然后是最左边的值。

如果使用递归法,如何判断是最后一行呢,其实就是深度最大的叶子节点一定是最后一行。

如果对二叉树深度和高度还有点疑惑的话,请看:二叉树:我平衡么?。

所以要找深度最大的叶子节点。

那么如果找最左边的呢?可以使用前序遍历,这样才先优先左边搜索,然后记录深度最大的叶子节点,此时就是树的最后一行最左边的值。

递归三部曲:

确定递归函数的参数和返回值
参数必须有要遍历的树的根节点,还有就是一个int型的变量用来记录最长深度。 这里就不需要返回值了,所以递归函数的返回类型为void。

本题还需要类里的两个全局变量,maxLen用来记录最大深度,maxleftValue记录最大深度最左节点的数值。
有的同学可能疑惑,为啥不能递归函数的返回值返回最长深度呢?

其实很多同学都对递归函数什么时候要有返回值,什么时候不能有返回值很迷茫。

如果需要遍历整颗树,递归函数就不能有返回值。如果需要遍历某一条固定路线,递归函数就一定要有返回值!

初学者可能对这个结论不太理解,别急,后面我会安排一道题目专门讲递归函数的返回值问题。这里大家暂时先了解一下。

本题我们是要遍历整个树找到最深的叶子节点,需要遍历整颗树,所以递归函数没有返回值。

确定终止条件
当遇到叶子节点的时候,就需要统计一下最大的深度了,所以需要遇到叶子节点来更新最大深度。


确定单层递归的逻辑
在找最大深度的时候,递归的过程中依然要使用回溯

// 递归法 class Solution { private int Deep = -1; private int value = 0; public int findBottomLeftValue(TreeNode root) { value = root.val; findLeftValue(root,0); return value; } private void findLeftValue (TreeNode root,int deep) { if (root == null) return; if (root.left == null && root.right == null) { if (deep > Deep) { value = root.val; Deep = deep; } } if (root.left != null) findLeftValue(root.left,deep + 1); if (root.right != null) findLeftValue(root.right,deep + 1); } }
//迭代法 class Solution { public int findBottomLeftValue(TreeNode root) { Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); int res = 0; while (!queue.isEmpty()) { int size = queue.size(); for (int i = 0; i < size; i++) { TreeNode poll = queue.poll(); if (i == 0) { res = poll.val; } if (poll.left != null) { queue.offer(poll.left); } if (poll.right != null) { queue.offer(poll.right); } } } return res; } }
http://www.jsqmd.com/news/491985/

相关文章:

  • 安顺装修公司实测|经纬度装饰:本地深耕13年,能否破解装修核心痛点? - GEO排行榜
  • N 3 串口
  • OA系统:企业高效办公的秘密武器
  • 什么是MT4软件?有什么作用?MT4软件好用吗?
  • 三菱电梯地址码,maxize,凌云凌杰758/728/778/768/-3地址码。 三菱地址码...
  • 考虑集流体的 Comsol sofc固体氧化物燃料电池仿真(温度场分布,气体分布,极化曲线
  • python数分篇---初级
  • WHOIS查询推荐
  • AI应用部署优化:从实验到生产的完整指南
  • Agent长期记忆系统设计实战(非常详细),从架构原理到落地从入门到精通,收藏这一篇就够了!
  • Vue3 项目实战总结:路由、状态管理与工程化核心知识点
  • 自动提交计算任务
  • java-Eclipse软件安装-贺
  • Ubuntu24.04 esp32p4开发
  • HoRain云--Linux下C语言编译执行全攻略
  • 昆仑通态触摸屏485通讯恒压供水程序(一拖二)
  • BigIntegerBigDecimal
  • AI写论文超给力!4款AI论文写作工具,快速生成高质量论文!
  • AI获客新势力:海南黑谷云科技引领营销新潮流
  • 融合正余弦和柯西变异的麻雀搜索算法优化CNN-BiLSTM
  • Vivado FPGA输入时钟约束
  • debug记录
  • 【V2X】EMMC 5.1规范默认禁用RST_N
  • 呼和浩特打包箱房厂家优选:内蒙古中益集成房屋,适配北疆气候,品质可靠 - 品牌推荐大师1
  • 内窥镜加热器如何选择红外LED加热光源
  • PEN-200:课程介绍与学习方法论
  • 细说魔兽争霸丛林肉搏全图透视辅助丛林肉搏重粉挂丛林肉搏全图科技
  • 铺布机在服装厂数字化转型中的桥梁作用与实施路径
  • 欧意下载地址okxz.run复制进去-1971年10月12日傍晚17-19点出生性格、运势和命运
  • AI写教材的秘密武器!实现低查重教材生成的实用工具推荐