513.找树左下角的值

news/2024/10/18 12:32:20/

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

示例 1:

513.找树左下角的值

示例 2:

513.找树左下角的值1

算法公开课">

思路:

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

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

 

代码:

python">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. 类和方法定义

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

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

2. 初始化变量

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

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

3. 调用遍历函数

python">    self.traversal(root, 0)return self.result

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

4. 定义遍历函数

python">    def traversal(self, node, depth):

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

5. 节点为空的情况

python">    if not node:return

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

6. 叶子节点处理

python">    if not node.left and not node.right:if depth > self.max_depth:self.max_depth = depthself.result = node.valreturn

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

7. 遍历左子树

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

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

8. 遍历右子树

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

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

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


http://www.ppmy.cn/news/1466224.html

相关文章

将字符串 “()“ ““ “|“ 条件组成的复杂表达式转换为ES查询语句

应用场景 "()" "&" "|" 这几个条件对于我们来说并不陌生, 其表达的逻辑非常明了, 又能通过很少的字符表达很复杂的嵌套关系, 在一些复杂的查询中会经常用到, 因此我最近也遇到了类似的问题,一开始觉得这类的工具应该挺常见的, 结果搜了半天…

想知道股指期货和期权有什么不同吗?

市场上目前有中金所的沪深300ETF,中证500和中证1000股指期货,期权市场有上证50ETF,沪深300etf和中证500ETF期权,股指期货和期权在买卖双方的权利义务、风险收益特征、保证金制度、上市合约数量等方面均有较大区别,下文…

N的阶乘(高精度)

目录 题目描述 输入格式 输出格式 样例输入 样例输出 思路 参考代码 题目描述 输入正整数n,输出n! 输入格式 一个正整数n,n 3000 输出格式 输出n! 样例输入 3 样例输出 9 思路 主要就是高精度乘法的模版&#x…

使用 pm2 或 screen 等工具来管理和后台运行你的 Node.js 应用

使用 pm2 或 screen 等工具来管理和后台运行你的 Node.js 应用。 使用 pm2 pm2 是一个用于 Node.js 应用的进程管理工具,提供了守护进程、日志管理和应用重启等功能。 安装 pm2: npm install pm2 -g启动你的 Node.js 应用: pm2 start se…

智慧景区ar导览系统景区手绘地图小程序开发搭建

智慧景区AR导览系统和小程序手绘地图的开发搭建需要考虑多个方面。 1. 技术团队和工具:需要组建一支技术实力强大的开发团队,包括前端开发、后端开发、数据库设计、AR技术应用等人员。选择合适的开发工具,如小程序框架、AR技术框架、云服务等…

数据赋能(107)——体系:数据采集——概述、关注焦点

概述 数据采集是指利用特定设备或技术,从原始数据源中捕获和记录数据的过程。 数据采集的主要目的是为了获取特定目标或现象的相关信息,以支持后续的数据分析、决策制定、业务优化等过程。 数据采集的重要性在于为企业和组织提供了关键的信息基础&…

Java为什么会成为现在主流的编程语言

Java为什么会成为现在的主流语言 前言一、Java语言概述Java是什么为什么大多数人会选择从事Java为什么从事Java的工作者数量从年递减 二、Java语言的特点简单性面向对象分布式(微服务)健壮性安全性体系结构中立可移植性解释型高性能多线程动态性 三、Jav…

WIN系统 -> 以太网未识别的网络问题

1.方法1 2. 3. 根据诊断提示解决问题。 方法2. 右键以太网属性