找树左下角的值-513

news/2024/9/18 19:06:53/文章来源:https://www.cnblogs.com/dfj-blog/p/18416124

题目描述

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

假设二叉树中至少有一个节点。

解题思路

这道题用层次遍历的方式来说是比较简单的,用递归的话如果我们看别人的精简代码很难看出其中隐藏的细节,这里递归遍历其实我们用到了回溯的思想,我们直接采用前序遍历的方式(其实三种遍历方式都是一样的),定义一个max_depth作为参考值记录当前遍历子树的最大深度,如果我们遍历到了叶子节点而且其深度大于这个max_depth我们就可以进行赋值操作,反之则不用,因为深度没有它大的话肯定不是最后一层的叶子节点,没有我们上一次遍历子树的层次高,就无需进行赋值操作

代码实例

层次

import java.util.*; 
class Solution {public int findBottomLeftValue(TreeNode root) {Deque<TreeNode> deque=new LinkedList<>();deque.add(root);List<Integer> result=new ArrayList<>();// result.add(root.val);while(!deque.isEmpty()){int size=deque.size();for(int i=0;i<size;i++){TreeNode temp=deque.pollFirst();result.add(temp.val);if(temp.right!=null){deque.addLast(temp.right);}if(temp.left!=null){deque.addLast(temp.left);}}}return result.get(result.size()-1);}
}

递归

import java.util.*;class Solution {int max_depth=Integer.MIN_VALUE;int result=0;public int findBottomLeftValue(TreeNode root) {bianli(root,1);return result;}public void bianli(TreeNode root,int depth) {if(root.left==null && root.right==null){if(depth>max_depth){max_depth=depth;result=root.val;}}if(root.left!=null){bianli(root.left,++depth);// 回溯的思想,我们要减去depth然后回溯到根节点然后再从1开始去遍历我们的右子树depth--;}if(root.right!=null){bianli(root.right,++depth);depth--;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/798031.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

加油站AI视频监控分析系统

加油站AI视频监控分析系统能够全天候不间断对加油站进行识别分析,提升发觉违反规定的行为、异常现象等安全隐患。加油站AI视频监控分析系统可以识别包括,现场人员打电话、加油站出现明火、烟雾、抽烟。除此之外还可以对现场人员卸油作业时释放静电不满足15分钟就开始卸油,卸…

Conda 报错 is excluded by strict repo priority

场景 Conda 报错 : Shell LibMambaUnsatisfiableError: Encountered problems whil场景 Conda 报错 : Shell LibMambaUnsatisfiableError: Encountered problems while solving: \- package python-3.8.8-hdbf39b2_5 is excluded by strict repo priority此错误可能出现在PyCha…

Thinkphp在线客服系统源码多语言外贸版_PHP客服系统源码Uniapp开发搭建+论文设计

在线客服系统是现代企业与客户沟通的重要工具,它不仅能够提升客户满意度,还能有效提高企业的工作效率。本文将详细介绍在线客服系统的源码开发搭建过程,包括需求分析、技术选型、系统架构设计、关键模块实现、测试与优化等各个环节,并辅以代码实例,帮助读者深入理解并实践…

『模拟赛』CSP-S加赛1

『模拟赛记录』CSP-S加赛1Rank 一般A. 小W与伙伴招募 仔细想了想,发现是贪心题。 赛时想了跟正解完全有些不太一样的做法,被顶针说假了,但其实开了 long long 能有 80pts。后来发现如果思路正确打 \(\mathcal{O(nm)}\) 的暴力能有 95pts。《对于 60% 的数据》考虑正解的贪法…

多线程六-线程通信之Condition使用与设计猜想

海上生明月,天涯共此时。愿大家在这个团圆的夜晚,收获满满的温馨和喜悦,团圆美满,中秋快乐!使用示例 ConditionDemoAwait :开始之后加锁,阻塞并释放锁 package com.caozz.demo5.concurrent;import java.util.concurrent.locks.Condition; import java.util.concurrent.lo…

[GXYCTF2019]BabyUpload 1

打开靶机,上传文件抓包 后缀不能带ph,大小写也无法绕过,意味着phtml后缀也无法上传对后缀只过滤ph,我们转变思路上传图片马,用.htaccess使图片马以php格式打开 上传图片马上传失败,试一试过滤了哪些字符 文件内容过滤了<?我们尝试另一种写法后成功上传<script lan…

DeepinV23安装Dotnet8

步骤: 第一步: 1.下载压缩包,2安装配置 第二步: 2准备工作:激活ROOT账号,重置密码解压目录:/home/bizuser/soft/dotnet/dotnet81.下载 直接🔗 https://download.visualstudio.microsoft.com/download/pr/14951030-5b4e-45ce-af0b-3d4aa613a70b/25acaeb050bbba6950a559…

高级Java程序员必备的技术点:你准备好了吗?

在Java编程的世界里,成为一名高级程序员不仅需要深厚的基础知识,还需要掌握一系列高级技术和最佳实践。这些技术点是通向技术专家之路的敲门砖,也是应对复杂项目挑战的利器。本文将探讨高级Java程序员必备的技术点,帮助你自我提升,迈向更高的职业巅峰。深入理解Java虚拟机…

无限debugger的解决----(一)

在尝试打开控制台时,遇到了这个问题,页面陷入无限debuuger。尝试(一)在debugger这一行点击Never pause here 也就是从不在此处暂停,但之后发现没用,关掉一个又出现一个。之后我又尝试了设置进入断点的条件,这个可以在调试过程中,期望某个变量的值大于某个具体的值的时候才停下来…

【USB3.0协议学习】Topic3三种Reset Events分析

USB3.0中的三种Reset Events 1. PowerOn Reset PowerOn Reset被用来代指上电复位,当一个device接入到root hub或者外置hub的时候,该device检测到Vbus信号从无效变为有效,会自动执行复位。(注意,self powered device不通过Vbus供电,但是Vbus发生转变的时候它同样会执行复位…

02策略模式

定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法可以独立于使用它的客户而变化1. 案例:营业员根据客户所购买商品的单价和数量,根据不同活动向客户收费**- 正常原价收费 - 八折收费 - 满300返100 2. 策略模式结构- 抽象策略类(Stategy):声明算法…

三、浅层神经网络

1、神经网络概览什么是神经网络?如下图:神经网络的结构与逻辑回归类似,只是神经网络的层数比逻辑回归多一层,多出来的中间那层称为隐藏层或中间层。从计算上来看,神经网络的正向传播和反向传播比logistic回归多了一次重复的计算。引入新的标签:方括号上标[i]表示当前所处…