513.找树左下角的值

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

示例 1:

513.找树左下角的值

示例 2:

513.找树左下角的值1

思路:

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

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

 

代码:

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

如果当前节点是叶子节点(即没有左子节点和右子节点),检查当前深度是否大于最大深度。如果是,更新 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)的方法遍历二叉树,并在遍历过程中记录最底层最左边节点的值。

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

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

相关文章

【C#】自定义List排序规则的两种方式

目录 1.系统排序原理 2.方式一&#xff1a;调用接口并重写 3.方式二&#xff1a;传排序规则函数做参数 1.系统排序原理 当我们对一个List<int>类型的数组如list1排序时&#xff0c;一个轻松的list1.sort();帮我们解决了问题 但是在实际应用过程中&#xff0c;往往我们…

【Python】Python异步编程

Python 异步编程 异步编程 异步编程是一种编程范式&#xff0c;通过非阻塞的方式执行任务&#xff0c;允许程序在等待某些操作&#xff08;如I/O操作、网络请求、数据库查询等&#xff09;完成时&#xff0c;继续执行其他任务。这与同步编程&#xff08;或阻塞编程&#xff09…

如何使用python检查网络设备的状态

使用Python来定期检查网络设备的状态通常涉及几个步骤&#xff0c;包括网络连通性测试、发送和接收SNMP&#xff08;简单网络管理协议&#xff09;请求、SSH&#xff08;安全外壳协议&#xff09;连接或Telnet连接等。以下是一些建议的方法&#xff1a; 网络连通性测试&#xf…

npm install 安装很慢如何解决?

1. 使用淘宝镜像 淘宝提供了一个更快的 npm 镜像源&#xff0c;可以大大加快依赖包的下载速度。你可以通过以下命令来设置淘宝镜像&#xff1a; npm config set registry https://registry.npmmirror.com然后再次运行 npm install&#xff1a; npm install2. 使用 nrm 切换镜…

使用Python进行数据分析的基本步骤

简介&#xff1a; 在当今的数据驱动世界中&#xff0c;数据分析已成为各行各业不可或缺的一部分。Python作为一种强大的编程语言&#xff0c;提供了丰富的库和工具&#xff0c;使得数据分析变得简单易行。本文将带你了解使用Python进行数据分析的基本步骤。 一、数据获取 从外…

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

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

找出字符串中出现最多次数的字符以及出现的次数

str.charAt(i) 是JavaScript中获取字符串中特定位置字符的方法&#xff0c;表示获取当前的字符。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…

遥感影像信息提取

刘老师&#xff08;副教授&#xff09;&#xff0c;来自双一流重点高校&#xff0c;长期从事GIS/RS/3S技术及其生态环境领域中的应用等方面的研究和教学工作&#xff0c;并参与GIS的二次开发&#xff0c;发表多篇sci论文&#xff0c;具有资深的技术底蕴和专业背景。 专题一&am…

SpringBoot 基础之自动配置

SpringBoot 自动配置 SpringBoot 通过 自动配置 简化了大量的繁复的配置信息。 启动类 Application 中有两处特别之处&#xff1a; 注解&#xff1a;SpringBootApplication run 方法&#xff1a;SpringApplication.run(…) SpringBootApplication 注解至少等价于以下三个注…

代码审计:Fortify SCA 代码审计神器.

什么是 Fortify SCA 代码审计工具 Fortify 是一个静态的、白盒的软件源代码安全测试工具。它通过内置的五大主要分析引擎&#xff1a;数据流、语义、结构、控制流、配置流等对应用软件的源代码进行静态的分析&#xff0c;通过与软件安全漏洞规则集进行匹配、查找&#xff0c;从…

Vue.js:渐进式JavaScript框架-前端开发

1.介绍-What is Vue? An approachable, performant and versatile framework for building web user interfaces. [一个平易近人、高性能和多功能的框架&#xff0c;用于构建 Web 用户界面。] --来自官网Vue.js - The Progressive JavaScript Framework | Vue.js (vuejs.org) …

WiFi蓝牙模块促进传统零售数字化转型:智能零售体验再升级

随着科技的不断发展&#xff0c;数字化转型已经成为了各行各业的必然趋势。在传统零售业中&#xff0c;WiFi蓝牙模块的应用正逐渐推动着行业的数字化转型&#xff0c;为消费者带来更加智能化、便捷化的零售体验。本文MesoonRF美迅物联网将从以下几个方面阐述WiFi蓝牙模块在传统…

企业如何释放生成式AI的业务价值

在生成式AI与大模型技术风起云涌的今天&#xff0c;如何让生成式AI应用在企业落地、真正释放生成式AI业务价值&#xff0c;也成为了广大企业最为关心的话题。 而在这一过程中&#xff0c;生成式AI服务提供商及其合作伙伴&#xff0c;都扮演着非常关键的角色。 积极拥抱生成式AI…

算法题day38(补5.24日卡:贪心算法day5)

一、刷题&#xff1a; 1.leetcode题目 435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09;(medium) 解决&#xff1a; class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:intervals.sort(key lambda x:(x[0],x[1]))ans 0for i…

一个程序员的牢狱生涯(51)换衣

星期二 换衣 秦所和老郅在交接完班后,走出了内班,今天是武所的班。 武所在进了内班后,第一件事就是打开大铁栅栏在过道内开始检查各个号子的坐班情况。二铺在纠正了我们坐班的位置后,也规规矩矩地坐着,号子里一片安静。 铁门的小窗户上随着脚步声的临近,出现了武所严肃的…

HTML标签(超链接、锚、表格、表单)

HTML的标签2 超链接标签&#xff1a;锚链接&#xff1a;表格标签&#xff1a;表单&#xff1a;输入输出&#xff1a; 超链接标签&#xff1a; 超链接标签&#xff1a;a ​ 属性&#xff1a; ​ href - 链接地址 ​ target - 跳转目标&#xff08;_self在当前卡…

人力资源管理系统,员工管理系统

项目概述 本项目是一款基于Spring BootVueElementUI的人力资源管理系统&#xff0c;有权限管理、财务管理、系统管理、考勤管理等功能模块 获取代码及服务 见闲鱼 技术栈 前端 Vue、Axios、ElementUI、Vue-Router、Vuex、ECharts 后端 Spring Boot、Jwt、MyBatis-Plus、…

王源演唱会火爆开枪

王源演唱会火爆开抢&#xff01;当夜幕降临&#xff0c;繁星点点&#xff0c;无数粉丝的心随着一个名字而狂跳——王源&#xff01;就在昨晚&#xff0c;王源的演唱会门票正式开抢&#xff0c;然而&#xff0c;就在这个激动人心的时刻&#xff0c;猫眼突然停止&#xff0c;让无…

springboot 自带的定时任务

启用springboot 定时任务 在springboot 启动类上增加EnableScheduling 注解 如下 SpringBootApplication EnableScheduling public class SpringApplication {public static void main(String[] args) {SpringApplication.run(SpringApplication.class, args);} }编写定时逻辑…

java 基础教程

第三章&#xff1a;程序控制语句 1.从小打到排序数值 import java.util.Scanner;public class NewTest {// 1.从小打到排序数值public static void main(String[] args) {Scanner s new Scanner(System.in);System.out.println("请输入3个整数&#xff1a;");int …