面试算法45:二叉树最低层最左边的值

news2024/9/21 18:45:06

题目

如何在一棵二叉树中找出它最低层最左边节点的值?假设二叉树中最少有一个节点。例如,在如图7.5所示的二叉树中最低层最左边一个节点的值是5。
在这里插入图片描述

分析

可以用一个变量bottomLeft来保存每一层最左边的节点的值。在遍历二叉树时,每当遇到新的一层时就将变量bottomLeft的值更新为该层第1个节点的值。当整棵二叉树都被遍历完之后,变量bottomLeft的值就是最后一次更新的值,也就是最后一层的第1个节点的值。

由于用广度优先的顺序遍历二叉树时需要区分不同的层,因此可以用两个队列分别存放不同层的节点,一个队列存放当前遍历层的节点,另一个队列存放下一层的节点。

public class Test {
    public static void main(String[] args) {
        TreeNode node8 = new TreeNode(8);
        TreeNode node6 = new TreeNode(6);
        TreeNode node10 = new TreeNode(10);
        TreeNode node5 = new TreeNode(5);
        TreeNode node7 = new TreeNode(7);
        TreeNode node9 = new TreeNode(9);
        TreeNode node11 = new TreeNode(11);

        node8.left = node6;
        node8.right = node10;
        node6.left = node5;
        node6.right = node7;
        node10.right = node9;
        node10.right = node11;

        int result = findBottomLeftValue(node8);
        System.out.println(result);
    }

    public static int findBottomLeftValue(TreeNode root) {
        Queue<TreeNode> queue1 = new LinkedList<>();
        Queue<TreeNode> queue2 = new LinkedList<>();
        queue1.offer(root);
        int bottomLeft = root.val;
        while (!queue1.isEmpty()) {
            TreeNode node = queue1.poll();
            if (node.left != null) {
                queue2.offer(node.left);
            }

            if (node.right != null) {
                queue2.offer(node.right);
            }

            if (queue1.isEmpty()) {
                queue1 = queue2;
                queue2 = new LinkedList<>();
                if (!queue1.isEmpty()) {
                    bottomLeft = queue1.peek().val;
                }
            }
        }

        return bottomLeft;
    }
}

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

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

相关文章

Apollo上车实践:打造安全、高效、舒适的出行体验

上车实践 概述自动驾驶车辆适配线控标准协议开环验证车辆 自动驾驶车辆集成了解传感器布置与连接了解车辆标定了解传感器标定循迹实践 自动驾驶测试与调车了解车辆安全操作流程了解实车控制调试了解实车定位调试 福利活动 主页传送门&#xff1a;&#x1f4c0; 传送 概述 通过…

C++设计模式_18_State 状态模式

State和Memento被归为“状态变化”模式。 文章目录 1. “状态变化”模式1.1 典型模式 2. 动机 (Motivation)3. 代码演示State 状态模式3.1 常规方式3.2 State 状态模式 4. 模式定义5. 结构( Structure )6. 要点总结7. 其他参考 1. “状态变化”模式 在组件构建过程中&#xf…

Apache ActiveMQ (版本 < 5.18.3) (CNVD-2023-69477)RCE修复方案/缓解方案

一、漏洞描述 Apache ActiveMQ 是美国阿帕奇&#xff08;Apache&#xff09;基金会的一套开源的消息中间件&#xff0c;它支持 Java 消息服务、集群、Spring Framework 等。 二、漏洞成因 ActiveMQ 默认开放了 61616 端口用于接收 OpenWire 协议消息&#xff0c;由于针对异常…

sqlite3 关系型数据库语言 SQL 语言

SQL(Structured Query Language)语言是一种结构化查询语言,是一个通用的,功能强大的关系型数据库操作语言. 包含 6 个部分: 1.数据查询语言(DQL:Data Query Language) 从数据库的二维表格中查询数据,保留字 SELECT 是 DQL 中用的最多的语句 2.数据操作语言(DML) 最主要的关…

视频下载工具Downie4 mac中文支持格式

Downie4 mac是一款视频下载工具。它支持下载各种视频网站上的视频&#xff0c;并且具有快速、稳定、易于使用的特点。 Downie支持下载各种视频网站上的视频&#xff0c;包括YouTube、Vimeo、Netflix、Hulu、Amazon等等。它具有快速、稳定的下载速度&#xff0c;可以帮助用户轻松…

HDFS架构介绍

数新网络_让每个人享受数据的价值浙江数新网络有限公司是一家开源开放、专注于云数据智能操作系统和数据价值流通的服务商。公司自主研发的DataCyber云数据智能操作系统&#xff0c;主要包括数据平台CyberData、人工智能平台CyberAI、数据智能引擎CyberEngine、数据安全平台Cyb…

手机app爬虫配置 (苹果手机)

近期在做某个项目,涉及到需要对手机app的进行数据爬取。在上一篇博文中,讲述了以模拟机为例的配置操作流程,这里将以苹果手机为例进行描述。 下面将讲述具体配置步骤 1、安装 抓包软件 fiddler (Fiddler | Web Debugging Proxy and Troubleshooting Solutions) ​ 下载后…

navicat15 恢复试用方法

1.运行&#xff0c;输入regedit&#xff0c;打开注册表 2.注册表中搜索 HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium&#xff0c;删除下面的Registration15XCS文件夹 3.注册表中再搜索 HKEY_CURRENT_USER\Software\Classes\CLSID 然后拉到文件夹目录的最后&#x…

实时视频混合和映射:Resolume Arena 6(专业的VJ)中文

Resolume Arena 6是一款专业的实时视频混合和映射软件&#xff0c;广泛应用于音乐表演、舞台演出、俱乐部活动等场合&#xff0c;打造令人惊叹的视觉效果和图像投影。它支持实时混合多个视频源&#xff0c;拥有视频映射功能以及提供多样实时效果和过渡效果&#xff0c;让用户能…

MySQL的MSI安装

MySQL的MSI安装 文章目录&#xff1a; MySQL的MSI安装材料准备&#xff1a;一、MySQL安装的准备工作二、MySQL的配置三、MySQL安装验证1、CMD命名验证2、MySQL 8.0 Command Line Client验证 材料准备&#xff1a; 1、x64或x86电脑 2、MySQL安装包 一、MySQL安装的准备工作 M…

Unity 粒子特效-第一集-五角星发射特效

一、基础理解 1.粒子特效的意思是&#xff0c;发射很多小的东西&#xff0c;组成一个效果 2.主要可以分成两种 a.一直循环&#xff08;如上图&#xff09; b.发射状 二、案例视频 今天我们做一个发射的五角星 三、案例分析 我们仔细来分析一下这个五角星的功能 1.每次显示1秒…

Android体育场馆预约系统+全套手把手视频教程

【项目功能介绍】 功能列表: 本系统包含后台管理和前端app双端系统, 本系统包含三个角色: 管理员,员工,app用户。 后台管理员的功能包含: 登录, 退出, 场馆管理,添加场馆,修改场馆,禁用启用场馆; 场馆场地管理,添加场馆场地,修改场馆场地,启用禁用场馆场地; 订单管理,确定订单…

Python自动化运维监控——批量监听页面发邮件(自由配置ini文件+smtplib)

一、程序样式 1.listen.ini配置文件 2.监控页面 3.日志 二、核心点 smtplib库&#xff1a;这里使用了smtp.qq.com与smtp.163.com两个发送邮件的地址&#xff0c;使用邮箱用户名与授权码来实现登录&#xff0c;端口都使用465&#xff0c;最后抛出异常&#xff0c;finally里…

分享一下微信小程序抽奖链接怎么做

标题&#xff1a;微信小程序抽奖链接制作全攻略&#xff0c;轻松玩转营销抽奖活动 一、引言 在当今的数字化时代&#xff0c;抽奖活动已经成为一种高效的市场营销策略&#xff0c;而微信小程序作为一个功能强大的移动端平台&#xff0c;为企业和个人提供了制作抽奖链接的便捷…

如何能够根据现有业务,结合代码清晰的知道技术实现是如何去实现的,方法论和切入点是什么?

要深入了解现有业务系统的技术实现&#xff0c;特别是当你想要准确理解某个具体功能或组件是如何实现的时候&#xff0c;你可以采取以下的方法论和切入点&#xff1a; 1. 文档和设计说明 首先查阅相关的技术文档和设计说明&#xff0c;这些文档通常会详细描述系统的架构、各个…

STM32———USART串口控制LED灯亮灭

1.硬件设计流程 2.程序设计流程 1.串口初始化时钟使能&#xff1a;RCC_APBxPeriphClockCmd(); GPIO初始化时钟使能&#xff1a;RCC_AHBxPeriphClockCmd();2.GPIO端口模式配置&#xff1a;GPIO_Init();3.串口参数初始化&#xff1a;USART_Init();4.串口使能&#xff1a;USART_C…

如何在React项目中引用less

安装less npm install less less-loader --save-dev暴露 webpack 文件 利用 npx create-react-app 搭建的 React 项目&#xff0c;默认隐藏 webpack 配置文件&#xff0c;引入 less 需要修改 webpack 配置文件&#xff0c;因此我们需要执行命令暴露 webpack 配置文件。 请先将…

SRM系统采购功能

SRM系统采购是企业为了优化供应链管理而采购的一种信息系统。它旨在帮助企业与供应商之间建立良好的合作关系&#xff0c;提供全面的供应商管理功能&#xff0c;以实现采购的效率和效益最大化。 首先&#xff0c;SRM系统采购在企业供应链管理中具有重要的意义。供应链是企业与供…

2023最新版本 FreeRTOS教程 -1-标准库移植FreeRTOS

源码下载 官网下载驱动 点击直达 源码剪裁 剪裁之后的图片,找我免费获取 添加进MDK 配置滴答定时器 全部工程获取 查看下方头像

pycharm使用ssh连接远程jupyter

1. 安装jupyter pip install jupyter2. 生成jupyter_notebook_config.py文件 jupyter notebook --generate-config3. 设置命令参数 jupyter notebook --no-browser --allow-root --port 8900配置Jupyter服务器 将上面的代码复制到命令行实参中&#xff1a;