算法力扣刷题记录 四十八【513.找树左下角的值】

前言

二叉树篇继续。
记录 四十八【513.找树左下角的值】


一、题目阅读

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

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

示例 1:
在这里插入图片描述

输入: root = [2,1,3]
输出: 1

示例 2:
在这里插入图片描述

输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7

提示:

二叉树的节点个数的范围是 [1,104]
-2^31 <= Node.val <= 2^31 - 1 

二、尝试实现

找最底层最左边的节点,依然要遍历树。
(1)确定遍历顺序:前序。因为需要获得最大深度,从上到下获取深度,使用前序遍历(中左右)。
(2)使用递归实现:那么按步骤确定。

  • 确定参数:需要传入节点——TreeNode* cur;需要传入深度——int depth,不是引用,为了方便回溯使用副本;需要记录结果——int& result,这是引用,方便替换值,所以不使用副本。
  • 确定返回值:结果在参数result中有记录,所以不需要返回值了。
  • 确定终止条件:当遇到叶子节点可以return。遇到叶子节点还有处理逻辑:
    • 判断这个叶子节点的深度是不是记录的最大深度。如果是,更新当前遍历的最大深度,同时更新result因为中左右的顺序,如果是更深的一层,肯定是最左边的叶子。
  • 确定逻辑:
    • 中:不用处理什么;
    • 左:如果cur->left存在,深入遍历,传递depth+1;
    • 右:如果cur->right存在,深入遍历,传递depth+1;和左的逻辑一样。

代码实现【递归】

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int maxdepth = 1;//记录当前遍历的最大深度void traversal(TreeNode* cur,int depth,int& result){if(!cur->left && !cur->right){//叶子节点if(depth > maxdepth){maxdepth = depth;result = cur->val;}return;}if(cur->left){traversal(cur->left,depth+1,result);}if(cur->right){traversal(cur->right,depth+1,result);}}int findBottomLeftValue(TreeNode* root) {int result;traversal(root,1,result);return result;}
};

三、参考学习

参考学历链接

学习内容

  1. 概念确定:左下角的值——最后一层最左边的值。
  2. 递归思路:深度最大就是最后一行;最左边:涉及遍历顺序。前中后都可以。
  • 遍历顺序原因:因为中没有处理逻辑,所以只要左在右的前面就好;前序(中左右)、中序(左中右)、后序(左右中)都是左在右的前面。
  • 注意:depth要回溯。
  1. 递归代码实现:就是二、中的代码实现

  2. 迭代思路:遍历到一层,先把这一层第一个节点记录下来;后面还有新的层,就替换新一层的第一个节点;那么记录的结果就是最后一层的第一个节点。

  3. 迭代代码实现

    /*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
    class Solution {
    public:int findBottomLeftValue(TreeNode* root) {int result;queue<TreeNode*> q;q.push(root);while(!q.empty()){int size = q.size();for(int i = 0;i < size;i++){TreeNode* cur = q.front();q.pop();if(i == 0){result = cur->val;}if(cur->left) q.push(cur->left);if(cur->right) q.push(cur->right);}}return result;}
    };
    

总结

【513.找树左下角的值】
在这里插入图片描述
链接: 三十七【二叉树层序遍历】 和四十三【最大、最小深度问题】

(欢迎指正,转载标明出处)

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

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

相关文章

【k8s部署elasticsearch】k8s环境下安装elasticsearch集群和kibana

文章目录 简介一.条件及环境说明二.需求说明三.实现原理及说明四.详细步骤4.1.规划节点标签4.2.创建三个statefulset和service headless配置4.3.创建service配置 五.安装kibana六.调整索引分区七.安装说明 简介 k8s集群中搭建有elasticsearch服务一般都会用到pvc&#xff0c;但…

在线工具--将Json结构映射为另外一种Json结构

具体请前往&#xff1a;在线工具-将json结构映射为另外一个json结构

如何在电磁仿真软件CST中设置自由边界?

CST中的默认仿真边界是六面体&#xff0c;那如果想要设置自由边界&#xff0c;应该怎么做呢&#xff1f;下面以一个简单例子说明设置自由边界的方法。&#xff08;1&#xff09;想要实现自由边界需要在六面体内做填充&#xff0c;首先根据需要创建一个形状&#xff0c;本例中想…

ZBrush入门使用介绍——1、基本操作

大家好&#xff0c;我是阿赵。   这期开始介绍一下ZBrush的用法。   ZBrush作为一个老牌的雕刻模型软件&#xff0c;已经有很多年的历史了。阿赵我接触它已经是将近20年前在首都师范大学学习三维影视课程的时候了。当时老师讲得比较随便&#xff0c;所以后来自己又找了一些…

Armv8-R内存模型详解

目录 1.内存模型的必要性 2.Armv8-R内存模型分类 2.1 Normal memory 2.2 Device Memory 2.2.1 Gathering 2.2.2 Reordering 2.2.3 Early Write Acknowledgement 3.小结 大家好&#xff0c;今天是悲伤的肌肉。 在调研区域控制器芯片时&#xff0c;发现了S32Z、Stellar …

AI Earth——MuSyQ 30m/10天叶片叶绿素含量产品(中国)应用 app

应用介绍 ​​​​​​​30m/10天合成的叶片叶绿素含量产品是空天院多源协同定量遥感产品生产系统((Multi-source data Synergized Quantitative remote sensing production system,MuSyQ))产品之一。 叶片叶绿素含量(Chlleaf)是植被遥感监测中最重要的参数之一,目前国…

记录我使用poi库,中文却无法显示的问题

目录 前言&#xff1a; 正片&#xff1a; 修改word的编码格式 第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a; 第五步&#xff1a; 修改idea编码格式 前言&#xff1a; &#x1f388;&#x1f388;&#x1f388;这是昨天晚上Blue遇到的…

WooCommerce网站加速指南:入门级方法

在如今快节奏的网络时代&#xff0c;网站加载速度直接影响用户体验和销售转化率。对于WooCommerce网站来说&#xff0c;这一点尤为重要。那么&#xff0c;如何让你的网站跑得更快呢&#xff1f;下面&#xff0c;我将分享一些入门级的方法&#xff0c;帮助你显著提升WooCommerce…

JVM之运行时数据区(一):程序计数器+本地方法栈

JVM之运行时数据区&#xff08;一&#xff09;&#xff1a;程序计数器本地方法栈 1.运行时数据区概述2.程序计数器作用特点常见问题 3.本地方法接口本地方法本地接口 4.本地方法栈特点 1.运行时数据区概述 Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区其中有一些…

物联网平台定义和架构

物联网平台是一个集成了设备接入、设备管理、数据安全通信、消息订阅、消息转发和数据服务等能力的一体化平台。它支持海量设备的连接&#xff0c;采集设备数据上云&#xff0c;同时提供云端API&#xff0c;使服务端可以通过云端SDK调用云端API将指令下发至设备端&#xff0c;实…

手机和电脑通过TCP传输(一)

一.工具 手机端&#xff1a;网络调试精灵 电脑端&#xff1a;野火网络调试助手 在开始通信之前&#xff0c;千万要查看一下电脑的防火墙是否关闭&#xff0c;否则可能会无法通信 在开始通信之前&#xff0c;千万要查看一下电脑的防火墙是否关闭&#xff0c;否则可能会无法通信…

大气热力学(10)——条件性不稳定

本篇文章源自我在 2021 年暑假自学大气物理相关知识时手写的笔记&#xff0c;现转化为电子版本以作存档。相较于手写笔记&#xff0c;电子版的部分内容有补充和修改。笔记内容大部分为公式的推导过程。 文章目录 10.1 为什么需要关注条件性不稳定&#xff1f;10.2 不稳定能量10…

使用自制Qt工具配合mitmproxy进行网络调试

在软件开发和网络调试过程中&#xff0c;抓包工具是不可或缺的。传统的抓包工具如Fiddler或Charles Proxy通常需要设置系统代理&#xff0c;这会抓到其他应用程序的网络连接&#xff0c;需要设置繁琐的过滤&#xff0c;导致不必要的干扰。为了解决这个问题&#xff0c;我们可以…

树结构添加分组,向上向下添加同级,添加子级

树结构添加分组&#xff0c;向上向下添加同级&#xff0c;添加子级 效果代码实现页面js 效果 代码实现 页面 <el-tree :data"treeData" :props"defaultProps" :expand-on-click-node"false":filter-node-method"filterNode" :ref&…

IP-Guard日志数据上传至 SYSLOG 服务器操作指南

一、功能简介 服务器支持把日志数据上传到 SYSLOG 服务器。 二、功能配置 2.1 数据目录移交设置 在服务器安装目录下 OServer3.ini 文件中&#xff0c;添加工具启动配置&#xff0c;配置五分钟内生效。 Path&#xff1a;设置移交目录路径&#xff0c;IPG 服务器会把收集完成的…

六西格玛培训:控制图——洞察过程真相的利器

在追求卓越绩效与持续质量改进的征途中&#xff0c;六西格玛无疑是企业不可或缺的导航灯。作为一套严谨而系统的管理方法&#xff0c;六西格玛不仅帮助企业识别并减少过程中的变异与缺陷&#xff0c;还促进了流程的优化与创新。而在这套强大的方法论中&#xff0c;控制图作为核…

【postgresql】角色(Role)

PostgreSQL 中&#xff0c;角色&#xff08;Role&#xff09;是一个重要的概念&#xff0c;用于管理数据库的访问权限和用户身份。角色可以被视为用户或组&#xff0c;具体取决于它们的配置方。 角色属性 角色可以具有多种属性&#xff1a; LOGIN&#xff1a;允许角色登录数据…

Floyd算法——AcWing 343. 排序

目录 Floyd算法 定义 运用情况 注意事项 解题思路 基本步骤 AcWing 343. 排序 题目描述 运行代码 代码思路 改进思路 Floyd算法 定义 Floyd算法&#xff0c;全称Floyd-Warshall算法&#xff0c;是一种用于解决图中所有顶点对之间的最短路径问题的动态规划算法。…

基于java+springboot+vue实现的实验室管理系统(文末源码+Lw)127

基于SpringBootVue的实现的实验室管理系统&#xff08;源码数据库万字Lun文流程图ER图结构图演示视频软件包&#xff09; 系统功能&#xff1a; 实验室管理系统 管理员功能有个人中心&#xff0c;学生管理&#xff0c;教师管理&#xff0c;公告信息管理&#xff0c;知识库管理…

杭州高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

杭州高校大学智能制造数字孪生技术作为智能制造的重要支撑&#xff0c;通过构建虚拟世界的镜像&#xff0c;实现对物理世界的实时监控、预测和优化。杭州高校大学智能制造实验室数字孪生可视化系统平台建设项目&#xff0c;旨在通过引入先进的数字孪生技术&#xff0c;构建一个…