LeetCode.102 二叉树的层序遍历

devtools/2024/10/20 16:50:21/

题目描述

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

提示:

  • 树中节点数目在范围 [0, 2000] 内
  • -1000 <= Node.val <= 1000

解题思路

对二叉树进行层序遍历即可,下一层的所有节点是当前层的所有左右子节点。用一个队列存储当前层的所有节点就好。

算法流程

1特例处理: 当根节点为空,则返回空列表 [] 。


2.初始化: 打印结果列表 res = [] ,包含根节点的队列 queue = [root] 。


3.BFS 循环: 当队列 queue 为空时跳出。
3.1新建一个临时列表 tmp ,用于存储当前层打印结果。
3.2当前层打印循环: 循环次数为当前层节点数(即队列 queue 长度)。

3.2.1出队: 队首元素出队,记为 node。
3.2.2打印: 将 node.val 添加至 tmp 尾部。
3.2.3添加子节点: 若 node 的左(右)子节点不为空,则将左(右)子节点加入队列 queue 。

3.3将当前层结果 tmp 添加入 res 。

4.返回值: 返回打印结果列表 res 即可。

代码解析

class Solution {public List<List<Integer>> levelOrder(TreeNode root) {//存储当前层所有节点的队列Queue<TreeNode> queue = new LinkedList<>();//结果集List<List<Integer>> res = new ArrayList();//如果当前根节点不为空,则加入队列,开始执行流程if(root != null){queue.add(root);}//当队列非空(当前层数有节点没有执行深度优先遍历)时while(!queue.isEmpty()){//新建一个tmp队列List<Integer> tmp = new ArrayList();//执行循环//循环次数:每一层的节点的个数for(int i = queue.size(); i>0; i--){//队列弹出当前节点TreeNode currNode = queue.poll();//往队列中加入当前节点的左右子节点,构建下一层if(currNode.left != null){queue.add(currNode.left);}if(currNode.right != null){queue.add(currNode.right);}//临时队列中加入当前层的节点,构建当前层节点队列,加入结果集中tmp.add(currNode.val);}//加入结果集res.add(tmp);}//返回结果集return res;}
}


http://www.ppmy.cn/devtools/127333.html

相关文章

Django-配置mysql

注意&#xff1a;需要在项目中安装mysqlclient包 setting文件数据库相关修改&#xff1a; DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: mysite3,USER: root,PASSWORD: bai12345,HOST: 127.0.0.1,PORT: 3306,} } 什么是模型&#xff1f;&#xff1a; ORM框架…

目标检测数据集图片及标签同步裁剪

目录 前言 具体方法 使用介绍 完整代码 前言 在目标检测任务中&#xff0c;模型的训练依赖于大量高质量的标注数据。然而&#xff0c;获取足够多的标注数据集往往代价高昂&#xff0c;并且某些情况下&#xff0c;数据集中的样本分布不均衡&#xff0c;这会导致模型的泛化能…

json路径 [‘a‘].b.c[0].d[‘1‘].f,具体代表什么意思

JSON路径是一种用于从JSON对象中提取数据的表达方式。你给出的路径 [a].b.c.d[1].f 代表了如何逐层访问JSON对象中的数据。让我们逐步解析这个路径&#xff1a; ‌[a]‌&#xff1a; 表示访问JSON对象的根元素中键为 a 的值。使用方括号 [] 通常意味着这个键是一个字符串&#…

信息与计算科学:“数学 + 计算机”,奏响未来科技新乐章

在当今科技飞速发展的时代&#xff0c;有一个专业如同一颗闪耀的新星&#xff0c;散发着独特的魅力&#xff0c;那就是信息与计算科学专业。 一、专业全貌&#xff1a;追根溯源&#xff0c;领略交叉之美 &#xff08;一&#xff09;专业的诞生与发展 1998 年&#xff0c;教育…

导尿管使用注意

现实生活中有一部分老年人得了前列腺增生后是相当的痛苦。当然很大一部分这类病人通过手术后痛苦就解决了。但是在这种疾病中有一部分人是不能通过手术解决的。 因为各种各样的原因一些病人不能做前列腺手术。不能手术又排不出尿&#xff0c;这部分病人就只能通过长期留置尿管…

Python酷玩之旅_数据分析入门(matplotlib)

导览 前言matplotlib入门1. 简介1.1 Pairwise data1.2 Statistical distributions1.3 Gridded data1.4 Irregularly gridded data1.5 3D and volumetric data 2. 实践2.1 安装2.2 示例 结语系列回顾 前言 翻看日历&#xff0c;今年的日子已划到了2024年10月19日&#xff0c;今天…

MusePose模型部署指南

一、模型介绍 MusePose是一个基于扩散和姿势引导的虚拟人视频生成框架。 主要贡献可以概括如下&#xff1a; 发布的模型能够根据给定的姿势序列&#xff0c;生成参考图中人物的舞蹈视频&#xff0c;生成的结果质量超越了同一主题中几乎所有当前开源的模型。发布该 pose alig…

对比损失(Contrastive Loss)详解

对比损失(Contrastive Loss)详解 对比损失(Contrastive Loss)是一种常见的度量学习损失函数,它通过学习样本对之间的相似性和差异性,使得相似样本对在特征空间中的距离更小,而不相似样本对的距离更大。这种方法广泛应用于人脸识别、图像检索等任务中。 核心思想 对比…