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

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.lryc.cn/news/360884.html

相关文章:

  • docker基础,docker安装mysql,docker安装Nginx,docker安装mq,docker基础命令
  • MyBatis二、搭建 MyBatis
  • 昵称生成器
  • mysql仿照find_in_set写了一个replace_in_set函数,英文逗号拼接字符串指定替换
  • 机械设计手册第一册:公差
  • 如何把图片保存成16位png格式?
  • vue 关闭页面前释放资源
  • 堡垒机,日志审计系统,行为管理,漏洞扫描的作用
  • JVM学习-自定义类加载器
  • NDIS Filter开发-OID 请求
  • 软考 系统架构设计师之考试感悟2
  • [学习笔记](b站视频)PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】(ing)
  • Flutter开发效率提升1000%,Flutter Quick教程之定义构造参数和State成员变量
  • R语言数据分析-xgboost模型预测
  • 使用redis的setnx实现分布式锁
  • LangChain进行文本摘要 总结
  • 政安晨【零基础玩转各类开源AI项目】:解析开源项目的论文:Physical Non-inertial Poser (PNP)
  • 【机器学习】基于OpenCV和TensorFlow的MobileNetV2模型的物种识别与个体相似度分析
  • 建模杂谈系列244 TimeTraveller
  • 基于MingGW64 GCC编译Windows平台上的 libuvc
  • 【Linux】网络高级IO
  • 【C++ ——— 继承】
  • kafka-守护启动
  • TypeScript 中的命名空间和模块化
  • 9 html综合案例-注册界面
  • Xilinx RFSOC 47DR 8收8发 信号处理板卡
  • ros2 launch 用法以及一些基础功能函数的示例
  • 如何使用Python获取图片中的文字信息
  • C++知识点
  • 反转字符串中的单词-力扣