【刷爆力扣之二叉树】102. 二叉树的层序遍历

server/2024/10/18 12:34:25/

102. 二叉树的层序遍历

二叉树的层序遍历需要队列数据结构,还需要记录每一层节点的个数,可以定义一个变量记录,也可以直接使用队列中元素个数表示每一层的节点个数,每次获取队列头中的节点后,需要判断该节点是否有左右孩子,如果有,则放入队列,并且将记录每一层节点个数的变量加一。

// 二叉树的层序遍历-变量记录每层节点个数
public List<List<Integer>> levelOrder(TreeNode root) {// 存储结果List<List<Integer>> result = new ArrayList<>();// 如果根节点为空,则直接返回结果if (root == null) {return result;}// 创建一个队列Queue<TreeNode> queue = new LinkedList<>();// 将根节点放入队列queue.offer(root);// 记录每一层的节点个数int c1 = 1;//每一层节点个数// 当队列不为空时while (!queue.isEmpty()) {// 记录下一层节点个数int c2 = 0;//下一层节点个数// 创建一个存储每一层节点的列表List<Integer> lever = new ArrayList<>();// 遍历每一层节点for (int i = 0; i < c1; i++) {// 从队列中取出一个节点TreeNode node = queue.poll();// 将节点的值添加到列表中lever.add(node.val);// 如果该节点有左子节点,则将左子节点放入队列if (node.left != null) {queue.offer(node.left);c2++;}// 如果该节点有右子节点,则将右子节点放入队列if (node.right != null) {queue.offer(node.right);c2++;}}// 更新每一层节点个数c1 = c2;// 将每一层节点列表添加到结果中result.add(lever);}// 返回结果return result;
}
//二叉树的层序遍历-直接使用队列长度表示每层节点个数
public static List<List<Integer>> levelOrder(TreeNode root) {List<List<Integer>> result = new ArrayList<>();Queue<TreeNode> queue = new LinkedList<>();if (root == null) {return result;}queue.offer(root);while (!queue.isEmpty()) {List<Integer> level = new ArrayList<>();// 直接使用队列的长度表示每一层节点的个数int size = queue.size();for (int i = 0; i < size; i++) {TreeNode polled = queue.poll();level.add(polled.val);// 如果有左右孩子,则加入队列if(polled.left!=null){queue.offer(polled.left);}if(polled.right!=null){queue.offer(polled.right);}}result.add(level);}return result;}

之所以可以使用队列长度直接表示每层节点个数是因为,从根节点开始,节点个数为1,这是已知的,在遍历当前层时,将当前层的节点全部弹出,又把下一层的节点全部入队,因此,只要遍历到下一层(当前层有孩子),那么说明此时的队列中的长度就是当前层的节点个数(即没有上一层节点,又没有下一层节点)。


http://www.ppmy.cn/server/28107.html

相关文章

模型智能体开发之metagpt-单智能体实践

需求分析 根据诉求完成函数代码的编写&#xff0c;并实现测试case&#xff0c;输出代码 代码实现 定义写代码的action action是动作的逻辑抽象&#xff0c;通过将预设的prompt传入llm&#xff0c;来获取输出&#xff0c;并对输出进行格式化 具体的实现如下 定义prompt模版 …

【PyTorch与深度学习】5、深入剖析PyTorch DataLoader源码

课程地址 最近做实验发现自己还是基础框架上掌握得不好&#xff0c;于是开始重学一遍PyTorch框架&#xff0c;这个是课程笔记&#xff0c;此节课很详细&#xff0c;笔记记的比较粗 1. DataLoader 1.1 DataLoader类实现 1.1.1 构造函数__init__实现 构造函数有如下参数&…

Java 基础重点知识-(泛型、反射、注解、IO)

文章目录 什么是泛型? 泛型有什么用?泛型原理是什么? Java 反射什么是反射? 反射作用是什么?动态代理有几种实现方式? 有什么特点? Java 注解什么是注解, 作用是什么? Java I/O什么是序列化?Java 是怎么实现系列化的?常见的序列化协议有哪些?BIO/NIO/AIO 有什么区别…

十大排序算法之——桶排序算法(Java实现)及思路讲解

桶排序&#xff08;Bucket Sort&#xff09;是计数排序的升级版。它利用了函数的映射关系&#xff0c;高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效&#xff0c;我们需要做到这两点&#xff1a; 首先要使得数据分散得尽可能均匀&#xff1b;对于桶中元素的排…

2024年第二十六届“华东杯”(B题)大学生数学建模挑战赛|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看华东杯 (B题&#xff09;&#xff01; 第一个问题…

java:EasyExcel使用(一)读excel

java&#xff1a;EasyExcel使用&#xff08;一&#xff09;读excel 1 前言 EasyExcel相比于传统使用poi进行excel文件读写&#xff0c;编程使用操作上更加方便快捷&#xff0c;且对于内存溢出进行了优化处理。本文是EasyExcel读excel操作。 Java解析、生成Excel比较有名的框…

78、贪心-跳跃游戏

思路 方法1: canJump01 - 使用递归&#xff08;回溯法&#xff09; 这个方法是通过递归实现的&#xff0c;它从数组的第一个位置开始&#xff0c;尝试所有可能的跳跃步数&#xff0c;直到达到数组的最后一个位置或遍历完所有的可能性。 思路&#xff1a; 如果数组为空或者长…

Unity编辑器扩展

Unity编辑器扩展 引言 在游戏开发领域&#xff0c;Unity因其强大的功能和灵活性而备受欢迎。Unity的编辑器扩展能力尤其突出&#xff0c;它允许开发者自定义编辑器界面和功能来满足特定的开发需求。通过编辑器扩展&#xff0c;我们可以优化工作流程&#xff0c;提高生产力&am…