day14I102.二叉树的层序遍历

news2025/4/24 8:20:25

1、102.二叉树的层序遍历

题目链接:https://leetcode.cn/problems/binary-tree-level-order-traversal/
文章链接:https://programmercarl.com/0102.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E5%B1%82%E5%BA%8F%E9%81%8D%E5%8E%86.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE添加链接描述
视频链接:https://www.bilibili.com/video/BV1GY4y1u7b2/?vd_source=721f65ae0501389782be0dcb48a2c421

package com.fourteenday.tree;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/**
 *  层序遍历二叉树:使用队列数据结构进行辅助
 */
public class CheckBinaryTree {

    public List<List<Integer>> resList = new ArrayList<List<Integer>>();

    public void checkFun01(TreeNode root){
        if (root == null) return;

        //创建一个队列用于广度优先搜索DFS
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(root); //将根节点入队

        //当队列不为空的时候进行遍历
        while (!queue.isEmpty()){
            //用于存储当前层级的节点值
            List<Integer> itemList = new ArrayList<>();
            //当前层级节点的个数
            int len = queue.size();

            //遍历当前层级的节点
            while (len > 0){
                //出队第一个节点
                TreeNode tmpNode = queue.poll();
                //将节点的值添加到列表中
                itemList.add(tmpNode.val);


                //将节点的左右节点入列
                if (tmpNode.left !=null) queue.offer(tmpNode.left);
                if (tmpNode.right !=null) queue.offer(tmpNode.right);
                
                //假设有左右节点,又回到外层循环的判断条件队列是否为空,现队列不为空继续执行
                
                len--;
            }
            //将当前层级的节点值列表添加到结果列表中(每一次)
            resList.add(itemList);
        }
    }

    /**
     *
     这个方法 levelOrder(TreeNode root) 是在类 CheckBinaryTree 中添加的,它的目的是为了方便外部调用和获取二叉树的层序遍历结果。
     在原先的代码中,checkFun01(TreeNode root) 是执行二叉树的层序遍历操作,将结果保存在实例变量 resList 中。
     为了让外部可以方便地获取层序遍历结果,新增了 levelOrder(TreeNode root) 方法,它会调用 checkFun01(TreeNode root) 执行遍历,并返回遍历结果 resList。
     这样外部使用者就可以直接调用 levelOrder(TreeNode root) 获取层序遍历结果,而不需要再单独执行层序遍历操作。
     这是一种提供更便利的方式,简化了用户的操作,并且符合代码的封装和模块化设计原则
     * @param root
     * @return
     */

    public List<List<Integer>> levelOrder(TreeNode root){
        checkFun01(root);
        return resList;
    }

    public static void main(String[] args) {
        CheckBinaryTree cbt = new CheckBinaryTree();
        TreeNode root = new TreeNode(1, new TreeNode(2, new TreeNode(4), new TreeNode(5)), new TreeNode(3, new TreeNode(6), new TreeNode(7)));
        List<List<Integer>> lists = cbt.levelOrder(root);
        System.out.println(lists);
    }
}

解题思路

请添加图片描述
1、层序遍历二叉树借用队列进行辅助遍历
2、返回的是一个二维数组,每一层的节点为一数组,将所有层级的节点数组统一在一起为一个数组就是一个二维数组的形态
3、当队列不为空的时候,优先记录队列中存在的元素,当len>0(存在几个元素就遍历取出几个元素)将当前层级的节点取出放入到linklist中,再将该节点的左右孩子放入队列中

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

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

相关文章

记一次Redis Cluster Pipeline导致的死锁问题

作者&#xff1a;vivo 互联网服务器团队- Li Gang 本文介绍了一次排查Dubbo线程池耗尽问题的过程。通过查看Dubbo线程状态、分析Jedis连接池获取连接的源码、排查死锁条件等方面&#xff0c;最终确认是因为使用了cluster pipeline模式且没有设置超时时间导致死锁问题。 一、背…

【C++】:内存管理

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux的基础知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数…

Webmin远程命令执行漏洞复现

文章目录 Webmin_1.910_rce(CVE-2019-15107)漏洞编号漏洞描述影响版本漏洞评级利用方法&#xff08;利用案例&#xff09;漏洞挖掘加固建议参考信息漏洞分类 Webmin_1.910_rce(CVE-2019-15107) 漏洞编号 CVE-2019-15107 漏洞描述 Webmin是一个用于管理类Unix系统的管理配置…

MytatisP详解

MP详解 一、基础使用1.引入2.Entry中的常用注解3.BaseMapper 、IService、ServiceImpl3.1BaseMapper 3.2IService、ServiceImpl 4.常用配置4.1 application.yml配置4.2 configuration 配置 5.Wrapper6.分页6.1使用分页方式一 7.自定义分页&#xff1a;查询指定列7.1 先用MP的分…

nginx绑定tomcat与tomcat联合使用的配置(nginx反向代理tomcat的配置说明)

nginx反向代理tomcat通信配置 &#xff08;内容来自网上&#xff0c;注解部分才是原创&#xff09; 切记&#xff1a; url的意思就是 unifed resource location 统一资源定位 其中location就是定位的意思 所以上文中的location就有 对应匹配的 url 标识的资源的相关配置之…

go 递归 数据多层级横向展开 插入数据库

需求&#xff0c;在两张表(一张主表&#xff0c;一张明细表&#xff0c;一对多的关系)中有层级关系&#xff0c;比如A(主表数据)&#xff0c;A1&#xff0c;A2&#xff0c;A3&#xff0c;A4(明细表数据)&#xff0c;而A1这些数据下面还有别的数据那它们也会出现在主表中&#x…

Pygame中将鼠标形状设置为图片2-2

3 编写主程序 在主程序中&#xff0c;首先创建屏幕并且完成一些准备工作&#xff0c;之后在while循环中不断更新sprite实例即可。 3.1 创建屏幕及准备工作 创建屏幕及准备工作的代码如图5所示。 图5 创建屏幕及准备工作 其中&#xff0c;第20行代码调用pygame.mouse模块中的…

足球公平盘、实力盘和盘口合理性的模型探讨

1. 公平盘模型事件 9月份&#xff0c;突然间好多人加我vx问及公平盘模型能否依靠下图做出来&#xff0c;几年没有人提及公平盘&#xff0c;突然好多人这么一问应该是从同一个讨论群过来的。 1.1 公平盘介绍 按照字面意思&#xff1a;真实反应即将开赛的两支球队在主客场时的让…

【Spring Boot】RabbitMQ消息队列 — RabbitMQ入门

💠一名热衷于分享知识的程序员 💠乐于在CSDN上与广大开发者交流学习。 💠希望通过每一次学习,让更多读者了解我 💠也希望能结识更多志同道合的朋友。 💠将继续努力,不断提升自己的专业技能,创造更多价值。🌿欢迎来到@"衍生星球"的CSDN博文🌿 🍁本…

微服务11-Sentinel中的授权规则以及Sentinel服务规则持久化

文章目录 授权规则自定义异常结果规则持久化实现Push模式 授权规则 根据来源名称对请求进行拦截 ——>我们需要解析来源名称&#xff08;RequestOriginParser默认解析都为default&#xff09;&#xff0c;所以我们要自定义一个实现类&#xff08;根据请求头解析&#xff0c…

MIT 6.S081 Operating System/Fall 2020 macOS搭建risc-v与xv6开发调试环境

文章目录 本机配置安装环境Homebrew执行安装脚本查看安装是否成功 RISC-V tools执行brew的安装脚本 QEMUXV6 测试有用的参考链接&#xff08;感谢前辈&#xff09;写在结尾 本机配置 电脑型号&#xff1a;Apple M2 Pro 2023 操作系统&#xff1a;macOS Ventura 13.4 所以我的电…

CTFHub SSRF 题目

文章目录 CTFHub SSRF 通关教程1. 内网访问&#xff0c;伪协议利用1.1 内网访问1.2 伪协议读取文件1.3 端口扫描 2. POST请求&#xff0c;上传文件&#xff0c;FastCGI协议&#xff0c;Redis协议2.1 POST请求2.2 上传文件2.3 FastCGI协议2.4 Redis协议 3. Bypass系列3.1 URL By…

中国人民大学与加拿大女王大学金融硕士究竟适合金融国企人还是金融外企人呢?

随着中国经济的快速发展&#xff0c;金融业已经成为国民经济的重要支柱产业。在这个背景下&#xff0c;金融国企和金融外企的发展也日益繁荣。想发展不断学习的脚步是一刻不能停歇的&#xff0c;由此&#xff0c;免联考双证的中国人民大学与加拿大女王大学金融硕士就开始逐渐走…

有哪些好用的电容笔?苹果平板触控笔推荐

对于学生党来说&#xff0c;用哪种电容笔比较合适&#xff1f;苹果的原装电容笔&#xff0c;尽管性能很好&#xff0c;功能也很多&#xff0c;却就是太贵了&#xff0c;一般人根本买不起&#xff0c;而且重量还挺重&#xff0c;握在手上使用久了会很费劲。如果你只是想单纯地用…

申博|2024国内985院校申博时间参考

转眼已近10月中旬&#xff0c;小编给大家总结了2024年国内985院校博士申请预计时间汇总&#xff0c;一般各高校都是临近博士报名启动才会发布具体的招生通知&#xff0c;所以想要申博的同学们可以在日期临近前注意查看高校官方信息。 以下申请时间为2023年博士申请的时间&…

4.添加3DTiles

愿你出走半生,归来仍是少年&#xff01; 在构建好的三维场景中添加3DTile&#xff08;本地离线数据以及在线服务&#xff09;。 1.在线服务 首先需要准备一个已发布出来的3DTile服务. 打开Cesium面板&#xff0c;添加Blank 3D Tileset &#xff0c;然后选中该对象&#xff0c;…

WIFI产品使用指导说明

一、登录服务器 二、新建产品 三、设置WIFI产品的联网参数 1、恢复出厂设置 2、设置参数 四、操作更新 网络连接特性&#xff1a; 路由器掉线得情况下&#xff0c; 第一次&#xff0c;搜索网络1分钟间隔第二次&#xff0c;搜索网络1分钟间隔第三次&#xff0c;搜索网络…

git下载bos仓库代码

安装git 插件 登录git 填写仓库地址后 把仓库代码 下载某个文件夹&#xff0c; 然后再拷贝到自己的 解决方案中

开发信群发技巧有哪些?外贸邮件怎么群发?

如何做外贸开发信群发&#xff1f;外贸开发信群发用什么邮箱好&#xff1f; 无论你是一位销售专业人员&#xff0c;一名初创企业家还是一家大型公司的市场营销团队成员&#xff0c;都能受益于掌握这些技巧。下面蜂邮EDM将为您介绍一些关键的开发信群发技巧&#xff0c;帮助你在…

批量执行insert into 的脚本报2006 - MySQL server has gone away

数据库执行批量数据导入是报“2006 - MySQL server has gone away”错误&#xff0c;脚本并没有问题&#xff0c;只是insert into 的批量操作语句过长导致。 解决办法&#xff1a; Navicat ->工具 ->服务器监控->mysql ——》变量 修改max_allowed_packet大小为512…