513.找树左下角的值

给定一个二叉树,在树的最后一行找到最左边的值。

示例 1:

513.找树左下角的值

示例 2:

513.找树左下角的值1

思路:

深度最大的叶子结点一定是最后一行。

优先左边搜索,记录深度最大的叶子节点,此时就是树的最后一行最左边的值

 

代码:

class Solution:
    def findBottomLeftValue(self, root: TreeNode) -> int:
        # 初始化最大深度为负无穷,表示尚未找到任何节点
        self.max_depth = float('-inf')
        # 初始化结果为None
        self.result = None
        # 调用遍历函数,从根节点开始,初始深度为0
        self.traversal(root, 0)
        # 返回最终结果,即最底层最左边的节点值
        return self.result
    
    def traversal(self, node, depth):
        # 如果节点为空,直接返回
        if not node:
            return
        
        # 如果当前节点是叶子节点(没有左子节点和右子节点)
        if not node.left and not node.right:
            # 如果当前深度大于最大深度,更新最大深度和结果
            if depth > self.max_depth:
                self.max_depth = depth
                self.result = node.val
            return
        
        # 先遍历左子树,并将深度加1
        if node.left:
            self.traversal(node.left, depth + 1)
        # 再遍历右子树,并将深度加1
        if node.right:
            self.traversal(node.right, depth + 1)

以下为详细逐步讲解:

1. 类和方法定义

class Solution:
    def findBottomLeftValue(self, root: TreeNode) -> int:

定义一个名为 Solution 的类,其中包含一个方法 findBottomLeftValue。该方法接受一个二叉树的根节点 root 作为参数,并返回树中最底层最左边的节点的值。

2. 初始化变量

    self.max_depth = float('-inf')
    self.result = None

初始化 max_depth 为负无穷大,以便后续比较时任何节点的深度都会大于这个初始值。result 初始化为 None,用于存储最底层最左边节点的值。

3. 调用遍历函数

    self.traversal(root, 0)
    return self.result

调用 traversal 方法,从根节点开始遍历,初始深度为0。遍历完成后,返回 result

4. 定义遍历函数

    def traversal(self, node, depth):

定义一个辅助函数 traversal,用于递归遍历二叉树。该函数接受一个节点 node 和当前深度 depth 作为参数。

5. 节点为空的情况

    if not node:
        return

如果当前节点为空,直接返回。

6. 叶子节点处理

    if not node.left and not node.right:
        if depth > self.max_depth:
            self.max_depth = depth
            self.result = node.val
        return

如果当前节点是叶子节点(即没有左子节点和右子节点),检查当前深度是否大于最大深度。如果是,更新 max_depthresult。然后返回,因为叶子节点没有子节点,遍历到此结束。

7. 遍历左子树

    if node.left:
        self.traversal(node.left, depth + 1)

如果存在左子节点,递归遍历左子树,并将深度加1

8. 遍历右子树

    if node.right:
        self.traversal(node.right, depth + 1)

如果存在右子节点,递归遍历右子树,并将深度加1

这段代码通过深度优先搜索(DFS)的方法遍历二叉树,并在遍历过程中记录最底层最左边节点的值。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

272 基于matlab的形态滤波和局域值分解(LMD)的齿轮故障诊断

基于matlab的形态滤波和局域值分解(LMD)的齿轮故障诊断,GUI交互界面。通过形态滤波对一维信号进行降噪处理,并通过LMD局部均值分解提取故障信号,最后提取处故障频率。程序已调通,可直接运行。 272 形态滤波…

红外听力教学考试系统-红外语音听力广播在大学英语四六级听力考试中应用

红外听力教学考试系统-红外语音听力广播在大学英语四六级听力考试中的应用 由北京海特伟业科技有限公司任洪卓发布于2024年6月1日 红外语音听力广播(即红外听力教学考试系统)在英语四六级听力考试的应用正日益凸显出其重要性和优越性。在当前的高等教育…

排序-插入排序与选择排序

插入排序 基本思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 打扑克牌整理手牌用的就是插入排序的思想 代码实现 void InsertSort(int* a, int n) { assert(a); …

中间件模版引擎

文章目录 中间件1.自定义中间件1)全局2)局部中间件 2.内置中间件(静态资源目录) Art-template1.模板语法1)输出2)原文输出3)条件判断4)循环5)子模版6)模版继承7&#xff…

2024四川三支一扶“考生信息表”照着填❗

2024四川三支一扶“考生信息表”照着填❗ ☑️四川三支一扶开始报名,大家要按照提示如实、准确、完整填写《高校毕业生“三支一扶”计划招募考生信息表》哦~ ☑️不知道怎么填写的宝子们,可以参考图1。 ☑️毕业证书编号如实填写,若是应届生&…

vue3 todolist 简单例子

vue3 简单的TodList 地址: https://gitee.com/cheng_yong_xu/vue3-composition-api-todo-app-my 效果 step-1 初始化项项目 我们不采用vue cli 搭建项目 直接将上图文件夹,复制到vscode编辑器,清空App.vue的内容 安装包 # 安装包 npm…

JVM双亲委派模型

在之前的JVM类加载器篇中说过,各个类加载器都有自己加载的范围,比如引导类加载器只加载Java核心库中的class如String,那如果用户自己建一个包名和类名与String相同的类,会不会被引导类加载器加载。可以通过如下代码测试&#xff0…

每周统计-20240531

用于测试程序的稳定性: 龙虎榜: 成交额: 封成比: 收盘前放量: 开盘抢筹: 封单额:

堆排序-java

这次主要讲了堆排序和堆的基本构造,下一期会详细讲述堆的各种基本操作。 文章目录 前言 一、堆排序 1.题目描述 2.堆 二、算法思路 1.堆的存储 2. 结点下移down 3.结点上移up 4.堆的基本操作 5.堆的初始化 三、代码如下 1.代码如下: 2.读入数据&#xff…

24年护网工具,今年想参加护网的同学要会用

24年护网工具集 吉祥学安全知识星球🔗http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247483727&idx1&sndb05d8c1115a4539716eddd9fde4e5c9&chksmc0e47813f793f105017fb8551c9b996dc7782987e19efb166ab665f44ca6d900210e6c4c0281&scene21…

2024拼多多 最新理论+实战干货,从入门到精通全链路多角度学习-7节课

基于最新规则理论结合实际的干货 课程内容: 01 2024年多多防比价新规则破局理论课与实操课.mp4 02 24年多多强付费第二节课基础内功.mp4 03 24年多多强付费第三节课直通车实操 .mp4 04 24年多多强付费第一节课市场定价格段,mp4 05 24年多多自然流第一节课市场…

Java+SVNCloud+Mysql课程设计

文章目录 1、主要内容2、所需准备3、与sql访问的中间类:SqlMessage4、窗口界面5、main方法 1、主要内容 课程设计,主要通过Javas wing创建窗口,jdbc连接云端mysql数据库进行基本操作,支持随机生成数据并用动态展示数据结果。 先…

计算机毕业设计 | springboot+vue会议室管理系统(附源码)

1,绪论 1.1 项目背景 随着企业规模的不断扩大,会议室管理愈加复杂。传统的手工预约会议室的方式已经无法满足现代企业的需求,因此,开发一套会议室系统方案变得尤为重要。会议室系统可以实现会议室的在线预约、会议室资源的有效利…

[SQL-SERVER:数据库安全及维护]:MSSM工具进行附加还原备份等操作

文章目录 目的介绍一、完整备份与还原(20分)1.将教师提供的TeachingDB数据库附加到个人使用的服务器上,并更名为TeachingDB_***(***为个人姓名)1.1 操作流程:将docker容器sqlserver数据库已有的mdf镜像文件…

C语言之旅:探索单链表

目录 一、前言 二、实现链表的功能: 打印 创建节点 尾插 尾删 头插 头删 查找 在指定位置之前插入数据 指定位置删除 在指定位置之后插入数据 打印 销毁 三、全部源码: 四、结语 一、前言 链表是一个强大且基础的数据结构。对于很多初…

Mac连接虚拟机(Linux系统)

1.确定虚拟机的IP地址 ifconfig //终端命令,查询ip地址 sudo apt install net-tools 安装完成后再次执行 ifconfig: 2.安装SSH(加密远程登录协议) (1).安装OpenSSH服务器软件包: sudo apt-get install openssh-ser…

Linux开发

建议大家使用 Linux 做开发 Linux 能用吗? 我身边还有些朋友对 linux 的印象似乎还停留在黑乎乎的命令行界面上。当我告诉他或者建议他使用 linux 时,会一脸惊讶的问我,那个怎么用(来开发或者日常使用)? …

鸿蒙开发接口资源管理:【@ohos.intl (国际化-Intl)】

国际化-Intl 说明:开发前请熟悉鸿蒙开发指导文档:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。Intl模块…

LabVIEW如何确保步进电机的长期稳定运行

步进电机因其良好的定位精度和控制性,在自动化设备中得到了广泛应用。然而,长期稳定运行对于任何电机系统都是一个重要的挑战。LabVIEW作为一款强大的图形化编程语言,通过其灵活的控制算法和实时监控能力,为步进电机的稳定运行提供…

慢SQL的治理思路

慢SQL的治理思路 什么是慢SQL慢SQL产生的原因查看慢 SQL 是否开启开启慢 SQL 记录开启慢查询日志分析慢 SQL解决和优化慢SQL的方法 什么是慢SQL 慢 SQL 指的是 MySQL 中执行比较慢的 SQL,排查慢 SQL 最常用的方法是通过慢查询日志来查找慢 SQL。 MySQL 的慢查询日志…