102. 二叉树的层序遍历【206】

news2024/12/23 5:05:02

难度等级:中等

上一篇算法:

 215. 数组中的第K个最大元素【382】

力扣此题地址:

102. 二叉树的层序遍历 - 力扣(Leetcode)

1.题目:102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

2.解题思路:

思路:

1.先判断这个树是否为空,为空则直接返回。

2.树不为空,我们将根节点放入一个队列中,然后每次取出这个节点后,相应的将他的左右子节点依次放入队列中,按照队列的先进先出的特性,依次将元素出队列。(难理解可以画图感受一下)

二叉树概念及基本功能实现

代码实现步骤:

1.先创建一个list,用于存放每层的元素,list中的元素以list为单位,每个单位存放一层元素

2.判断树是否为null

3.创建一个队列,用于元素的入队出队,根据队列先进先出的特性,保证元素的顺序性

4.将根节点加入队列

5.开始循环,判断队列是否为null,不为null则继续循环(一次循环代表遍历一层)

        (1)先创建个list链表,用于存放每层的元素

        (2)获取当前队列的长度,也就是每层有多少个元素

        (3)进入for循环,队列的长度就是终止条件,for循环中:需要将已有的元素出队并放入list链表中,将对应的左右子节点依次放入队列中。

        (4)执行完(1)(2)(3)后,将这一层的元素的list集合作为一个元素放入到最终的list链表中

6.return 链表

3.代码实现:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        //先创建一个List链表,作为返回值
        List<List<Integer>> ret = new ArrayList<List<Integer>>();
        //判断树是否为null
        if (root == null) {
            return ret;
        }

        //创建一个队列,根据队列先进先出的特性,用于元素的入队出队
        ArrayDeque<TreeNode> queue = new ArrayDeque<TreeNode>();
        //先将根节点放入队列
        queue.add(root);
        //如果队列不为null
        while(!queue.isEmpty() ){
            //因为list返回值类型中,每个元素是一个List链表,
            //所以在每遍历完一层后就创建一个list,将每层的元素分别放入list中作为元素返回
            List<Integer> level = new ArrayList<Integer>();
            //获取每层的结点个数,用于循环终止条件
            int currentLevelSize = queue.size();
            for (int i = 1; i <= currentLevelSize; ++i) {
                //出队
                TreeNode node = queue.poll();
                //将出队的元素放入list中
                level.add(node.val);
                //判断左右子树是否为null,不为null就对应地将元素从左到右添加到队列中
                if (node.left != null) {
                    queue.add(node.left);
                }
                if (node.right != null) {
                    queue.add(node.right);
                }
            }
            //每一层遍历完就放入ret中
            ret.add(level);
        }
        
        return ret;
        }
}

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

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

相关文章

构建清晰、高效的Android应用程序:了解Android架构组件

概述 Android 架构组件是一个由 Google 推出的集成库&#xff0c;旨在使 Android 应用开发更加快捷、高效和易于维护。Android 架构组件提供了一套可扩展的 API&#xff0c;帮助开发者在编写 Android 应用时&#xff0c;更好地组织应用的代码&#xff0c;并提供了一些通用的、…

C++ | 一些你所忽略的类和对象小知识

文章目录 一、再谈构造函数1、初始化列表引入初始化的概念区分语法格式及使用注意事项 2、explict关键字单参构造函数多参构造函数 二、static成员1、面试题引入2、static特性细述3、疑难解惑4、在线OJ实训5、有关static修饰变量的一些注意要点 三、匿名对象四、友元1、友元函数…

iPhone照片太多,如何快速搜索照片?

当你在iPhone中存储了大量照片&#xff0c;如何快速找到其中的某一张照片&#xff1f;通过“照片”应用&#xff0c;你可以轻松查找特定人物、地点、事物或事件的照片。 通过标签查看&#xff1a; 轻点照片应用右下角的“搜索”&#xff0c;iOS 系统会自动将照片分类显示。 时…

java944医院医疗物资管理系统

本系统以医院业务流程为基础&#xff0c;结合考虑医疗物资的特点&#xff0c;主要包含物流信息管理系统中的后勤物资仓库管理、供应消毒物资管理、科室申请领用管理以及查询决策系统等功能。 目 录 1 1课题背景 2 2整体设计 2 2.1 设计目标 2 2.2 系统架构 3…

xorm实战——结构体映射到实现数据库操作(包含导出数据库脚本)

下载引入框架 go语言中要使用orm框架需要先下载框架&#xff0c;并引入&#xff1a; // 安装工具包 go get xorm.io/xorm//安装数据库驱动&#xff08;这里是mysql&#xff09;go get -u github.com/go-sql-driver/mysql//引入框架import ("gorm.io/driver/mysql"&…

4月26日,每日互动(个推)与您相约第六届数字中国建设峰会

4月26日-30日&#xff0c;第六届数字中国建设峰会及成果展览会将在福州隆重举行。本届峰会以“加快数字中国建设&#xff0c;推进中国式现代化”为主题&#xff0c;由国家网信办、国家发改委、科技部、工信部、国务院国资委、福建省人民政府共同主办&#xff0c;福州市人民政府…

嵌入式Linux(4):应用层和内核层数据传输

文章目录 简介1、如果在应用层使用系统IO对设备节点进行打开&#xff0c;关闭&#xff0c;读写等操作会发生什么呢&#xff1f;写个例子2、假如驱动层的file_operations里面没有实现read之类的操作函数&#xff0c;会发生什么&#xff1f;3、应用层和内核层室不能直接进行数据传…

Go语言面试题--基础语法(27)

文章目录 1.下面这段代码输出什么&#xff1f;2.下面这段代码输出什么&#xff1f;3.下面这段代码输出什么&#xff1f; 1.下面这段代码输出什么&#xff1f; func main() {var a [5]int{1, 2, 3, 4, 5}var r [5]intfor i, v : range a {if i 0 {a[1] 12a[2] 13}r[i] v}f…

ROS学习第五节——话题通信之发布

首先补充一个命令ROS计算图 rosrun rqt_graph rqt_graph 1.原理讲解 话题通信实现模型是比较复杂的&#xff0c;该模型如下图所示,该模型中涉及到三个角色: ROS Master (管理者)Talker (发布者)Listener (订阅者) ROS Master 负责保管 Talker 和 Listener 注册的信息&…

数字孪生(1)

目前接触的客户群体是做大屏展示&#xff0c;闲鱼上5元包邮的那种科技感前端&#xff08;不好意思我买了&#xff09;各路模型大整合 实景GISiOT&#xff0c;如果再来点动画就好&#xff0c;然满屏动起来&#xff0c;火灾烧起来&#xff0c;水面荡漾起来&#xff0c;工程车开起…

关于GeoServer发布的wfs服务的精度问题

本周基于arcgis/core组件&#xff0c;利用arcgis api for js 4.22版本加载GeoServer发布的同一数据源的wms和wfs服务&#xff0c;出现了偏移的问题。 分析&#xff1a;同一数据源不同的访问方式&#xff0c;出现了偏移&#xff0c;这是很严重的问题。初步判断为js api加载方式的…

2023年4月北京/江苏/深圳CDGA/CDGP数据治理专家认证考试报名

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

【社区图书馆】Go语言程序设计感想

随着 Go 语言的越来越流行&#xff0c;越来越多的人对其设计和语法进行了评价。以下是一些关于 Go 技术的感想&#xff1a; Go语言的特色&#xff1a; 没有继承多态的面向对象强一致类型interface不需要显式声明(Duck Typing)没有异常处理(Error is value)基于首字母的可访问…

大学计划《数字化转型赋能教育创新发展高峰论坛》成功举办

2023年4月8日&#xff0c;由航天科技控股集团股份有限公司&#xff08;简称“航天科技”&#xff09;主办&#xff0c;CFF上海与上海电子信息职业技术学院承办、智慧树网支持的《数字化转型赋能教育创新发展高峰论坛》线上会议顺利召开。此次会议邀请到了众多教育界专家、教学名…

Linux 文件描述符

Linux 文件描述符 Linux 中一切皆文件&#xff0c;比如 C 源文件、视频文件、Shell脚本、可执行文件等&#xff0c;就连键盘、显示器、鼠标等硬件设备也都是文件。 一个 Linux 进程可以打开成百上千个文件&#xff0c;为了表示和区分已经打开的文件&#xff0c;Linux 会给每个…

基于AT89C51单片机的电子万年历系统

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87708258 源码获取 主要内容&#xff1a; 电子万年历系统以实时时钟芯片DS1302和AT89C52单片机为主要研究对象&#xff0c;着重进行51单片机控制系统的设计研究和如…

天梯赛 L3-025 那就别担心了

原题链接&#xff1a; PTA | 程序设计类实验辅助教学平台 题目描述&#xff1a; 下图转自“英式没品笑话百科”的新浪微博 —— 所以无论有没有遇到难题&#xff0c;其实都不用担心。 博主将这种逻辑推演称为“逻辑自洽”&#xff0c;即从某个命题出发的所有推理路径都会将结…

DHCP的原理和配置

DHCP在一个广播域里动态修改IP地址 背景 DHCP (Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议)由Internet工作任务小组设计开发专门用于为TCP/IP网络中的计算机自动分配TCP/IP参数的协议 使用DHCP的好处 减少管理员的工作量避免输入错误的可能避免IP地…

Java每日一练(20230421)

目录 1. 整数排列 &#x1f31f; 2. 数组排序 &#x1f31f; 3. 单词搜索 &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 整数排列 十位数的所有排列…

jmeter的界面介绍

前言 jmeter是一款进行接口自动化&#xff0c;性能测试的开源的工具 界面 jmeter菜单里面有个文件--模板&#xff0c;这个主要是一些请求不知道怎么设置时可以选择预制的一些模板 选择对应的模板点击创建&#xff0c;就可以生成一个对应的记录&#xff0c;我们选择jdbc&…