java数据结构与算法刷题-----LeetCode102. 二叉树的层序遍历

2021.5.21开始的兔系刷题之路 根据LeetCode分类进行逐个击破 培养出自己的套路~ 从前辈们的学习经验中获得建议 并开始一点点地实践 争取一天可以刷一道题 慢慢地把这些专题都刷过来! 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

1. 法一:广度优先遍历(队列)

解题思路:时间复杂度O(n),空间复杂度O(n)

因为每个结点都要出入队列两次,所以是O(2 * n)的时间复杂度

  1. 先入队列根节点
  2. 则队列中结点个数为第1层结点个数
  3. 出队列根节点,然后将左右孩子入队列
  4. 回到第二不,当前队列中的左右孩子就是第二层的结点个数
  5. 继续第3步,出队列第二层的结点,同时将左右孩子入队列
  6. 以此类推直到队列中没有结点。
  7. 注意,每次出队列时,要先保存当前队列的size(),然后循环输出,否则每出队列一个元素,都会将其孩子入队列,会一直遍历下去,直到队列空。
代码

在这里插入图片描述

/**
 * 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<Integer>> result = new ArrayList<List<Integer>>();//保存答案
        if(root == null) return result;//如果为空,直接返回空
        Queue<TreeNode> queue = new LinkedList<>();//广度优先,需要队列
        queue.offer(root);//先将根节点入队列
        while(!queue.isEmpty()){//如果队列有值,就说明没遍历完
            List<Integer> level = new ArrayList<>();//保存当前层结点的值
            int currentLevelSize = queue.size();//当前队列中的结点个数,就是当前层的结点个数
            for(int i = 1;i <= currentLevelSize; i++){//将当前层输出
                TreeNode node = queue.poll();//先出队列
                level.add(node.val);//将其值进行遍历
                if(node.left!=null) queue.offer(node.left);//如果有左孩子就入队列
                if(node.right!=null) queue.offer(node.right);//如果有右孩子就入队列
            }//end_for
            result.add(level);//将当前层添加到结果中
        }//end_while
        return result;
    }//end_levelOrder
}//end_Solution

1. 法二:深度优先遍历(递归)

解题思路:时间复杂度O(n),空间复杂度O(n)

每个结点都只访问一次,所以是O(n)的时间复杂度,比上面那个广度优先的实现,每个结点都少存取了一次

  1. 先遍历根结点,设置为0层,并创建一个容器专门保存0层的结点
  2. 然后遍历左孩子,设置为当前层+1层,并创建一个容器专门保存当前层+1层的结点
  3. 递归遍历左孩子完成后,然后遍历右孩子,同样为当前层+1,保存在对应层的容器中
代码

在这里插入图片描述

class Solution {
    private void dfs(TreeNode root, int depth, List<List<Integer>> result) {
        if (root == null) return;//如果当前结点为null,直接返回,出口条件
        //如果当前结点是depth层的第一个结点,那么需要先申请空间,new ArrayList<>()
        if (result.size() == depth) result.add(new ArrayList<>());
        //拿到当前层的链表,保存结点值
        result.get(depth).add(root.val);
        //继续遍历左孩子,但是孩子的层级+1
        dfs(root.left, depth + 1, result);
        //继续遍历右孩子,孩子的层级+1
        dfs(root.right, depth + 1, result);
    }
    //入口程序
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> result = new ArrayList<>();//保存层序遍历结果
        dfs(root, 0, result);//从第0层开始深度优先
        return result;
    }
}
【简单】力扣算法题解析LeetCode102:二叉树的层序遍历 本文介绍了二叉树的层序遍历(BFS)实现方法。通过队列逐层处理节点,确保从左到右访问,并返回分层结果列表。代码使用Java实现,通过队列和预分配空间优化性能,时间复杂度O(n),空间复杂度O(n)。文章包含示例、解题思路、代码说明和边界处理,适合快速掌握层序遍历的核心逻辑。点击底部名片可获取完整可调试代码。 阅读详情

相关推荐

AI Agent技能评测框架SkillsBench:从黑盒评估到白盒技能拆解

在人工智能领域,模型评估是衡量技术进展的核心环节。传统评测基准如GLUE、MMLU主要关注模型的通用认知能力,但实际工程应用中,AI Agent需要的是在复杂场景中协调多种能力的“职业技能”。SkillsBench创新性地将Agent能力进行原子化拆解,定义了理解规划、工具调用、推理决策、交互安全等技能维度,并通过领域专家构建的评测集确保生态效度。这一框架为Agent开发提供了精准的“度量衡”,使性能优化从经验驱动转向数据驱动,同时为不同模型和框架提供了公平比较的基础,推动了AI Agent生态从“野蛮生长

weixin_30530339的博客 389

使用Java花样解决leetcode102.二叉树的层序遍历

自己用了两种方法写了这个二叉树层序遍历,但没想到看了看题解,又蹦出两种方法,都让我受益匪浅,具体运行时的注解全在代码里面了,刚开始看到这个题,立马想到二叉树的宽度优先遍历嘛。二话不说,直接队列走起: class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> result = new ArrayList<&

zrulin的博客 868

消费级显卡跑大模型:RTX 3060 12G 部署 70 亿参数 AI 编程助手的优化实战

本文详细介绍了如何在消费级显卡RTX 3060 12G上,通过量化、投机解码和分页KV-Cache等核心优化技术,成功部署并流畅运行70亿参数的CodeLlama-7B编程助手。文章提供了从环境配置、模型准备到参数调优的完整实战笔记,实测显存占用降至7.3GB,生成速度达21.7 token/秒,为开发者和技术爱好者提供了可行的本地AI部署方案。

weixin_29053067的博客 1263

leetcode 102. 二叉树的层序遍历-java实现

BFS层序遍历的模板。

qq_41810415的博客 734

上线之前多一道闸:业务审核系统的接入定义、双轨状态机与可靠生效闭环

运营后台“保存即生效”,让价格、库存、人群等配置每次修改都相当于一次无评审的上线。本文以至尊会员降价活动为例,系统拆解业务审核系统:用带业务语义的操作编码、规则化审核人与候选人快照、完整的生效回调契约做好接入定义;把业务改造为提交待生效,以不可变快照、字段级差异和唯一约束加幂等号防误配防重复;用审批轨与执行轨双轨状态机、链路式重新提交和以事件为准的审核链路理清状态;最后以发件箱、幂等键、超时先查后试、乐观锁与对账闭合生效环节,并结合两个可运行的Java程序,给出五种生效策略的事故率实测对比。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 6万+

1、工作流介绍

工作流起源于办公自动化,是对软件中业务流程的抽象。通过工作流将各个任务有序组织起来形成一个完整的业务闭环。比如:请假审批流程,网上购物流程,银行贷款流程;!

leyoliu的博客 5114

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

LeetCode 第102题 二叉树的层次遍历

kezade的blog 1031

在 SAP 中修改 Profile 文件中的主机名需要谨慎操作,需需确保所有相关配置保持一致

在SAP系统中修改Profile文件主机名需谨慎操作,主要步骤包括:1)停止相关SAP服务;2)重命名并编辑实例级Profile文件(如ER1_D00_OLDHOST改为ER1_D00_LRPSAP),修改所有含旧主机名的参数;3)可选更新默认Profile文件;4)在Windows系统中调整注册表配置;5)验证一致性后重启服务。关键注意:保持大小写统一、修改前备份文件、集群环境需同步所有节点。通过系统日志确认新主机名生效且无报错。

金牌架构师 1052

Leetcode 102.二叉树的层序遍历(java)

当len-->0时,从队列中poll出一个节点,将他的值add进list中,再看它的左右孩子是否为空,如果不为空,则将其加入到队列中,当len=0则表示这一层的节点已经遍历完了,队列中如果还有剩余的节点是下一层的了。定义泛型为list的list:List result = new ArrayList();因为输出结果是一个二维的数组,所以先定义一个list用来集合每一层的list,然后定义一个队列来遍历二叉树。如果根节点为空,则直接返回。

backpacker的博客 310

基于改进Unet的多场景水果图像分割与分类研究

本文针对复杂场景下的水果图像分割问题,提出了一种改进Unet模型。通过构建包含8类水果、3种成熟度及多种干扰场景的数据集,采用ResNet50与MobileNetV3作为骨干网络,并在跳跃连接层集成CBAM注意力机制。实验表明,改进模型在测试集上达到91.6%的mIoU,推理速度提升23%,特别在重叠水果和低光照场景表现突出。研究为农业视觉检测提供了有效解决方案。

AI的内部世界的博客 304

Wazuh部署记录

Wazuh是一个免费的开源安全平台,统一了XDR和SIEM功能。它可以保护内部部署、虚拟化、容器化和基于云的环境中的工作负载。Wazuh帮助组织和个人保护其数据资产免受安全威胁。它被全球数千个组织广泛使用,从小型企业到大型企业。443:仪表盘界面访问端口1515:探针连接服务器端口1514:探针回传信息端口以上3个端口必须打开防火墙。

墨痕诉清风的博客 1562

二叉树层序遍历——java

目录 一、题目 二、层序遍历顺序 三、思路(迭代法) 四、代码实现 一、题目 1、链接:力扣 2、内容:给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]] 二、层序遍历顺序 层序遍历就是一层一层从左到右开始遍历,如下图,结果为:1--2--3--5--6--7 三、思路(迭代法) ..

weixin_50616848的博客 4128

8155源码编译DSP(ubuntu环境下)

一.设置环境变量 -users:/$ sudo gedit ~/.bashrc #set adsp cdsp tools path #export ARMLMD_LICENSE_FILE=<LICENSE FILE INFO> #export ARMTOOLS=RVCT221 #export ARMROOT=/pkg/asw/compilers/arm/ADS1.2 #export ARM_COMPILER_PATH=/pkg/qct/software/arm/RVDS/2.2BLD593

Johnny2004的专栏 1679

[C++]Leetcode超高效刷题顺序及题目详解笔记(持续更新中)

一.引言 博主最近在LeetCode上用C++练习。一路走来踩过一些坑,做了一些总结和笔记,分享给需要的人。 LeetCode网址:https://leetcode.com/ LeetCode中文版:https://leetcode-cn.com/ 二.刷题指南 LeetCode 是一个非常棒的平台,收集了许多公司的面试题目。相对其他平台而言,有着下面的几个优点: 题目全部来自业内大公司的真实面试不用处理输入输出 精力全放在解决具体问题上题目有丰富的讨论 可以参考别人的思路精确了解自己代码在所有提交代码中

cpb____的博客 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LeetCode刷题汇总

剑指offer 剑指 Offer 03 数组中重复的数字 剑指 Offer 04 二维数组中的查找 剑指 Offer 05 替换空格 剑指 Offer 06 从尾到头打印链表 剑指 Offer 07 重建二叉树 剑指 Offer 09 用两个栈实现队列 剑指 Offer 10- I 斐波那契数列 剑指 Offer 10- II 青蛙跳台阶问题 剑指 Offer 11 旋转数组的最小数字 剑指 Offer 12 矩阵中的路径 剑指 Offer 13 机器人的运动范围 剑指 Offer 14- I 剪绳子 剑指

weixin_44171872的博客 2万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

LeetCode Java面试刷题笔记汇总

LeetCode Java刷题笔记汇总,按照类型刷题效率更高。

终生学习践行者 2948

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

力扣刷题路线

结合高频题、经典题和算法思想学习建议,分阶段从基础到进阶编排,覆盖所有核心标签,并标注题号与学习方法。:画图模拟快慢指针移动,如移动零时快指针探路、慢指针标记非零位置。:括号生成时,左括号数不能超过n,右括号数不能超过左括号数。:LCA问题中,若左右子树均含目标节点,则当前节点为祖先。:终止条件、递归调用、返回值,如二叉树深度递归返回。:掌握虚拟头节点、递归反转、环形检测。:掌握索引操作、快慢指针、滑动窗口。:熟悉括号匹配、单调栈、层序遍历。:熟悉反转、哈希统计、回文处理。

FAQEW的博客 1819

力扣刷题之102、二叉树的层序遍历

本文介绍了力扣第102题“二叉树的层序遍历”的解题方法。该题要求按层从左到右遍历二叉树节点,属于中等难度。解题采用广度优先搜索(BFS)和队列实现,关键点在于记录当前层节点数后再处理。Java代码展示了具体实现,通过队列存储节点,逐层处理并保存结果。时间复杂度为O(n),空间复杂度最坏为O(n)。该方法是解决树类层序问题的通用技巧,掌握BFS+队列的写法能应对类似题目。

2401_87778289的博客 585

LeetCode:102. 二叉树的层序遍历

LeetCode:102. 二叉树的层序遍历 _ 递归、迭代法 _ 你会建立一棵二叉树吗? 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

Super algorithm 的博客,技术爱好者。 1089

LeetCode102.二叉树的层序遍历(Java实现)

LeetCode102.二叉树的层序遍历(Java实现) 二叉树简介 百度百科: 二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分 。 二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该

三少说 1008

20分钟速刷十道二叉树层序遍历题

本文通过10道二叉树层序遍历题目,系统讲解了广度优先搜索(BFS)的核心思想与实现模板。

bugMaker_0621的博客 826

二叉树的层序遍历(Java版)-LeetCode102题(每日一题)

二叉树的层序遍历 本文更新一种二叉树的遍历方式(层序遍历),来自LeetCode102题,题目来源:LeetCode102题传送门 其他二叉树遍历方法传送门如下: 遍历二叉树(前序、中序和后续的递归和非递归遍历,绝对简单易懂!!!) 二叉树的广度优先遍历和深度优先遍历(Java版) 题目详情如下: package LeetCode102; import java.util.ArrayList; import java.util.LinkedList; import java.util.List;

shaomingmin的博客 246

每日一题:Leetcode-102 二叉树的层序遍历

力扣题目解题思路java代码。

LIUCHANGSHUO的博客 555

【leetcode刷题记录】(java)二叉树

【leetcode刷题记录】(java)二叉树 刷题参考代码随想录:https://programmercarl.com/

南京大学软件工程硕士在读 1318
上一篇: java数据结构与算法刷题-----LeetCode222. 完全二叉树的节点个数
下一篇: java数据结构与算法刷题-----LeetCode257. 二叉树的所有路径
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值