Leetcode102二叉树的层序遍历(java实现)

news2024/9/22 7:35:30

今天分享的题目是lee102题,题目的描述如下:在这里插入图片描述
可能做到这道题的小伙伴写过其他关于二叉树的题目,但是一般是使用递归的方式做一个深度遍历,而层序遍历我们该如何做呢?
解题思路:使用一个队列来记录本层节点,并且用一个size记录本层的节点有几个
具体的流程,首先我们先将3加入队列,然后记录本层size=1,队列弹出,也就是将节点3弹出,此时我们看他是否有左右子树如果有加入队列,那么一看是有将左子树加入,右子树加入,然后size此时为2,然后弹出节点3的左子树9,下面的执行逻辑就和节点3是相同的了。
具体的代码实现:

class Solution {
    //收集结果
    List<List<Integer>> list = new ArrayList();
    public List<List<Integer>> levelOrder(TreeNode root) {
        check(root);
        return list;
       
    }
    public void check(TreeNode node){
        //返回条件
        if(node==null) return;
        Queue<TreeNode> queue = new LinkedList();
        //先将节点加入队列
        queue.add(node);
        //循环终止的条件就是我们的队列为空
        while(!queue.isEmpty()){
            //记录本层节点的个数有几个
            int size = queue.size();
            //收集每层的节点,因为需要返回的是二维的
            List<Integer> res = new ArrayList();
            //用size控制弹出节点的个数
            while(size>0){
                //弹出队列的头节点元素并删除
            TreeNode head = queue.poll();
            //将结果加入到res中
            res.add(head.val);
            //如果当前节点左/右不为空,那么加入队列
            if(head.left!=null) queue.add(head.left);
            if(head.right!=null)queue.add(head.right);
            size--;
            }
            //每次执行一次循环也就是一组数组,将结果数组加入到list中
            list.add(res);
            
        }

        }     
}

如果觉得不是太理解的可以debug走一走,如果还有其他疑问可以在文章下方留言,如果觉得博主写的文章对你学习有帮助的话,麻烦给个小小的三联吧o( ̄▽ ̄)ブ

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

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

相关文章

浅谈新能源汽车充电桩安装以及防范

摘要&#xff1a;随着国家对绿色环保的倡导&#xff0c;新能源电动汽车应运而生&#xff0c;它们采用清洁能源替代传统能源&#xff0c;有效避免了对自然环境的污染&#xff0c;并减少了资源消耗&#xff0c;实现了资源的高效利用。新能源电动汽车的普及降低了使用成本&#xf…

Rust Linux开发人员自比道路建设者和寻路者的区别

红帽公司&#xff08;Red Hat&#xff09;的长期直接渲染管理器&#xff08;Direct Rendering Manager&#xff0c;DRM&#xff09;子系统维护者大卫-艾尔里&#xff08;David Airlie&#xff09;撰写了一篇有趣的博文&#xff0c;将开发人员的类型与筑路工人、寻路者与酒店进行…

800G OSFP光模块发展概述

在快速发展的高速网络领域&#xff0c;800G OSFP光模块的演变象征着创新与进步。自诞生以来&#xff0c;800G OSFP光模块凭借哪些独特优势脱颖而出&#xff1f;本文将重点介绍800G OSFP光模块的发展路径。 800G OSFP光模块发展路径 路径一&#xff1a;EML 路由 800G DR8 OSF…

Python进阶07-高级语法

零、文章目录 Python进阶07-高级语法 1、with语句 &#xff08;1&#xff09;文件操作 文件使用完后必须关闭&#xff0c;因为文件对象会占用操作系统的资源&#xff0c;并且操作系统同一时间能打开的文件数量也是有限的 # 第一步&#xff1a;打开文件 f open(python.txt…

另一种关于类的小例

前言 我们还是以一段关于构造函数的代码作为开端&#xff0c;我们以之前银行家的小项目为背景 class Account {constructor(owner, currency, pin) {this.owner owner;this.currency currency;this.pin pin;} }const ITshare new Account(ITshare, EUR, 21211); console.…

堆垛机及AGV能力计算

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 完整版文件和更多学习资料&#xff0c;请球友到知识星球【智能仓储物流技术研习社】自行下载。 这份文件是关于堆垛机和AGV&#xff08;…

第六课,模运算进阶,计算机存储单位

一&#xff0c;模运算的进阶知识 先复习一下已知的模运算知识&#xff1a; ①符号是%&#xff0c;但作为模运算符号时应念作“模”而非“百分之”或“百分号” ②参与模运算的数必须是两个整数&#xff0c;其作用是计算余数 然后新学几个模运算知识&#xff1a; ③当被除数是…

IPv4和子网掩码

目录 IP地址&#xff1a; IP概念&#xff1a; 网络号与主机号&#xff1a; 网关与跨网通信&#xff1a; IP地址的分类&#xff1a; 子网掩码&#xff1a; 如何确定两个IP地址是否在同一网段; 练习&#xff1a; 补充&#xff1a; IP地址&#xff1a; IP概念&#xff1…

哪家宠物空气净化器能吸毛除臭?希喂、352真实测评分享

自从家里同时迎来了猫咪与狗狗&#xff0c;生活的色彩确实丰富了许多&#xff0c;但这份喜悦的背后&#xff0c;也有每天理都理不断的“盛况”。每当结束了一天的忙碌&#xff0c;满心期待着家的温馨与安宁&#xff0c;推开家门的那一刻&#xff0c;猫和狗先迎接我的反而是它们…

Python实战项目:天气数据爬取+数据可视化(完整代码)_python爬虫实战

一、选题的背景 随着人们对天气的关注逐渐增加&#xff0c;天气预报数据的获取与可视化成为了当今的热门话题&#xff0c;天气预报我们每天都会关注&#xff0c;天气情况会影响到我们日常的增减衣物、出行安排等。每天的气温、相对湿度、降水量以及风向风速是关注的焦点。通过…

聊一聊质量测试框架

目录 质量测试框架的概述&#xff1a; 质量测试框架相关术语&#xff1a; 质量测试框架的构成及特性&#xff1a; 质量测试参考模型&#xff1a; 质量的生存周期的QM&#xff1a; 测量结果的应用&#xff1a; 常见的质量测试框架有哪些&#xff1f; 质量测试框架在使用…

springboot启动很慢,加载xml时卡住 或者 {dataSource-1} inited卡住 或者 primary数据库配置错误,很久启动不起来

springboot启动很慢&#xff0c;加载xml时卡住 或者 {dataSource-1} inited卡住 或者 primary数据库配置错误&#xff0c;很久启动不起来 1.第一步先rebuild一下2.如果还是很慢&#xff0c;可能是你debug启动的同时加了很多断点&#xff0c;需要把断点去掉。3.如果还是不行&…

设计模式-结构型模式-享元模式

1.享元模式定义 摒弃了在每个对象中保存所有数据的方式&#xff0c;通过共享多个对象所共有的相同状态&#xff0c;从而让我们能在有限的内存容量中载入更多对象&#xff1b; 1.1 享元模式优缺点 优点 极大减少内存中相似或相同对象数量&#xff0c;节约系统资源&#xff0c…

Ascend C算子开发(入门)—— 算子开发初体验

文章目录 Ascend C算子开发&#xff08;入门&#xff09;—— 算子开发初体验Host与Device核函数什么是核函数如何编写核函数&#xff1f; 核函数实现例子——Hello World完整核函数泛讲 Ascend C算子开发&#xff08;入门&#xff09;—— 算子开发初体验 Host与Device Host…

从零开始学cv-9:图像滤波

文章目录 前言一、简介&#xff1a;二、图像滤波实现&#xff1a;2.1 均值滤波&#xff1a;2.2 高斯滤波&#xff1a;2.3 中值滤波&#xff1a;2.4 锐化滤波&#xff1a; 前言 在信息化时代&#xff0c;图像已成为人们获取信息、沟通交流的重要载体。随着科技的飞速发展&#…

《高等代数》范德蒙德行列式的证明

说明&#xff1a;此文章用于本人复习巩固&#xff0c;如果也能帮助到大家那就更加有意义了。 注&#xff1a;1&#xff09;利用数学归纳法证明范德蒙德行列式。 2&#xff09;将范德蒙德行列式最后一列除了“1”以外都化为“0”&#xff0c;再按照最后一列展开。 3&#xff09…

Python编码系列—Python项目架构的艺术:最佳实践与实战应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

线段树解决区间合并类问题

如果只维持一段区间连续1的最长字串长度是无法被线段树维护的&#xff1a;所以可以增加信息来共同维护 1.维护三个信息&#xff1a;连续1的最长字串长度、连续1的最长前缀长度、连续1的最长后缀长度 2.如果一段区域连续1的长度小于区域的总长度&#xff1a; 3.如果一段区域连续…

力扣376-摆动序列(java详细题解)

题目链接&#xff1a;https://leetcode.cn/problems/wiggle-subsequence/ 前情提要&#xff1a; 因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。 贪心方法&#xff1a;局部最优推出全局最优。 如果一个题你觉得可以用局部最优推出全局最优&#xff0c;并且…

最新时光邮局系统,给未来写封信系统PHP源码美化版

源码介绍 最新时光邮局系统&#xff0c;给未来写封信系统PHP源码美化版视频教程。 给未来写封信开源源码&#xff0c;本源码支持用户给未来某个人发送一封信。前端采用MDUI框架后端对于定时发信采用screenphp的方式,未来将会增加其稳定性&#xff0c;寄出的信是可以在数据库查…