⭐北邮复试刷题429. N 叉树的层序遍历(按层入队出队BFS)

news2025/3/13 3:13:47

429. N 叉树的层序遍历

给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。

树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。

示例 1:



输入:root = [1,null,3,2,4,null,5,6]
输出:[[1],[3,2,4],[5,6]]

示例 2:



输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]
 

提示:
树的高度不会超过 1000
树的节点总数在 [0, 10^4] 之间

在这里插入图片描述

题解:

主要思路就是常规BFS,只不过每次从队列拿元素的时候一次将一层的节点全部拿出,再将这些节点下层的children都同时入队即可。这样会造成最后多一次入队出队,所以最后加上一次判空操作即可;

代码:

/*
// Definition for a Node.
class Node {
    public int val;
    public List<Node> children;

    public Node() {}

    public Node(int _val) {
        val = _val;
    }

    public Node(int _val, List<Node> _children) {
        val = _val;
        children = _children;
    }
};
*/

class Solution {
    public List<List<Integer>> levelOrder(Node root) {
        Queue<Node> queue = new LinkedList<>();
        List<List<Integer>> res = new ArrayList<>();
        if(root == null){
            return res;
        }

        queue.offer(root);
        List<Integer> list = new ArrayList<>();
        list.add(root.val);
        res.add(list);
        while(!queue.isEmpty()){
            // 队列想边拿边加时,则利用长度字段;想只拿不加可以用队列判空,最后队列再加;
            List<List<Node>> tmpList = new ArrayList<>();
            while(!queue.isEmpty()){
                // 出队
                // 将同层的节点一次拿出
                Node tmpQueueOne = queue.poll();
                if(tmpQueueOne.children != null)
                    tmpList.add(tmpQueueOne.children);
            }
            if(tmpList == null || tmpList.size() == 0)
                continue;
            int tmpLen = tmpList.size();
            List<Integer> tmpResOfOne = new ArrayList<>();
            for(int i=0;i<tmpLen;i++){
                if(tmpList.get(i) != null){
                    for(int j=0;j<tmpList.get(i).size();j++){
                        tmpResOfOne.add(tmpList.get(i).get(j).val);
                        // 入队
                        // 将本层下层的孩子全部同时入队
                        queue.offer(tmpList.get(i).get(j));
                    }
                }
            }
            if(tmpResOfOne == null || tmpResOfOne.size() == 0)
                continue;
            res.add(tmpResOfOne);
        }
        return res;
    }
}

在这里插入图片描述

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

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

相关文章

面试经典150题——螺旋矩阵

"The harder the conflict, the more glorious the triumph." - Thomas Paine 1. 题目描述 2. 题目分析与解析 2.1 思路一 看到题目&#xff0c;先仔细观察矩阵&#xff0c;题目要求我们给出顺时针遍历的结果即可&#xff0c;我们根据矩阵可以看出&#xff0c;首…

漏桶和令牌桶有啥区别?

漏桶算法 漏桶算法是一种流量控制算法&#xff0c;可以平滑控制流量的进出&#xff0c;原理比较简单:假设我们有一个水桶按固定的速率向下方滴落一滴水&#xff0c;无论有多少请求&#xff0c;请求的速率有多大&#xff0c;都按照固定的速率流出&#xff0c;对应到系统中就是按…

RK3399平台开发系列讲解(USB篇)USB 主设备和从设备

&#x1f680;返回专栏总目录 文章目录 一、主设备二、集线器三、功能设备 沉淀、分享、成长&#xff0c;让自己和他人都能有所收获&#xff01;&#x1f604; &#x1f4e2;介绍 USB 主设备和从设备。 一、主设备 检测 USB 设备的插拔动作管理主从通讯之间的控制流管理主从通…

如何使用python 挑战将ai生成的概念图制作成2d游戏

要使用Python将AI生成的概念图制作成2D游戏&#xff0c;你可以遵循以下步骤&#xff1a; 生成概念图&#xff1a; 使用AI图像生成工具&#xff08;如DALL-E、DeepArt等&#xff09;来创建你的游戏概念图。保存生成的图像文件&#xff0c;通常为PNG或JPEG格式。 选择游戏引擎&a…

SHERlocked93 的 2021 年终总结

我还是和往年一样&#xff0c;总结发的又晚了一点&#xff0c;为什么又发这么晚呢&#xff0c;因为懒 年终总结 疫情之后时间时间过的太快了&#xff0c;不知道是不是只有我这样感觉。 四五月份去兰州玩了下&#xff08;其实是出差&#xff09;&#xff0c;终于看到了黄土高原&…

力扣 123. 买卖股票的最佳时机 III

题目来源&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/description/ C题解&#xff1a;动态规划。至多买卖两次&#xff0c;这意味着可以买卖一次&#xff0c;可以买卖两次&#xff0c;也可以不买卖。 一天一共就有四个状态&#xff1a; 第…

ubuntu22.04@laptop OpenCV Get Started: 013_contour_detection

ubuntu22.04laptop OpenCV Get Started: 013_contour_detection 1. 源由2. 应用Demo2.1 C应用Demo2.2 Python应用Demo 3. contour_approx应用3.1 读取图像并将其转换为灰度格式3.2 应用二进制阈值过滤算法3.3 查找对象轮廓3.4 绘制对象轮廓3.5 效果3.6 CHAIN_APPROX_SIMPLE v.s…

在Linux系统中安装LANMP

LANMP是Linux下Apache、Nginx、MySQL和PHP的应用环境&#xff0c;本节演示 的是WDLinux的一款集成的安装包&#xff0c;操作起来非常简单。首先&#xff0c;下载需要的安装包&#xff0c; 命令如下所示。 wget http://dl.wdlinux.cn/files/lanmp_v3.tar.gz 下载完成后进行解压…

Eclipse - Reset Perspective

Eclipse - Reset Perspective 1. Window -> Perspective -> Reset Perspective2. Reset Perspective -> YesReferences 1. Window -> Perspective -> Reset Perspective 2. Reset Perspective -> Yes ​​​ References [1] Yongqiang Cheng, https://yo…

Rocky Linux网卡静态配置

一、Rocky Linux 下载安装 1、安装教程 Rocky Linux 下载安装 二、远程工具MobaXterm下载安装 1、安装教程 &#xff08;预留&#xff09; 三、Rocky Linux 网卡配置 1、使用ip addr确认网卡名称&#xff08;此处可得知网卡为ens160&#xff09; [rootlocalhost ~]# ip a 1:…

[Angular 基础] - 视图封装 局部引用 父子组件中内容传递

[Angular 基础] - 视图封装 & 局部引用 & 父子组件中内容传递 之前的笔记&#xff1a; [Angular 基础] - Angular 渲染过程 & 组件的创建 [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 以上为静态页面&#xff0c;即不涉及到跨组…

每日五道java面试题之java基础篇(十一)

目录: 第一题. Java死锁如何避免&#xff1f;第二题. 为什么⽤线程池&#xff1f;解释下线程池参数&#xff1f;第三题. 线程池的底层⼯作原理第四题. ReentrantLock中tryLock()和lock()⽅法的区别第五题. Sychronized和ReentrantLock的区别? 第一题. Java死锁如何避免&#x…

元器件焊盘的PCB处理方式分析与总结

对于高速信号走线的特性阻抗&#xff0c;都需要按照实际要求进行精度控制&#xff0c;所以&#xff0c;任何因设计因素带来的阻抗波动都应该进行优化&#xff0c;如下图所示&#xff0c;为一个12层板设计中的50Ω微带走线&#xff0c;需要在走线之上放置电感&#xff1b; 但是&…

Open CASCADE学习|管道建模

​这是用Open CASCADE Technology (OCCT)库来创建一个管道模型的示例。OCCT是一个开源的几何建模库&#xff0c;广泛应用于CAD/CAM/CAE和其他几何建模应用中。 在下面的代码中&#xff0c;首先创建了一些点&#xff0c;并用这些点来构建B样条曲线&#xff0c;进而创建边(Edges…

openGauss学习笔记-222 openGauss性能调优-系统调优-操作系统参数调优

文章目录 openGauss学习笔记-222 openGauss性能调优-系统调优-操作系统参数调优222.1 前提条件222.2 内存相关参数设置222.3 网络相关参数设置222.4 I/O相关参数设置 openGauss学习笔记-222 openGauss性能调优-系统调优-操作系统参数调优 在性能调优过程中&#xff0c;可以根据…

面试题-01

1、JDK 和 JRE 和 JVM 分别是什么&#xff0c;有什么区别&#xff1f; JDK&#xff08;Java Development Kit&#xff0c;Java 软件开发工具包&#xff09; JDK&#xff08;Java Development Kit&#xff09;&#xff1a;JDK 是 Java 开发⼯具包&#xff0c;包含了编写、编译…

政安晨:【完全零基础】认知人工智能(一)【超级简单】的【机器学习神经网络】 —— 预测机

开个头 很多小伙伴们很想亲近人工智能与机器学习领域&#xff0c;然而这个领域里的核心理论、算法、工具给人感觉都太过“高冷”&#xff0c;让很多小伙伴们望而却步&#xff0c;导致一直无法入门。 如何捅破这层窗户纸&#xff1f; 让高冷的不再高冷&#xff0c;让神秘的不…

jwt+redis实现登录认证

项目环境&#xff1a;spring boot项目 pom.xml引入jwt和redis <!-- jwt --><dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>4.3.0</version></dependency><!-- redis坐标-->…

使用redis-insight连接到服务器上的redis数据库

一、安装redis&#xff1a; 安装 Redis。你可以通过运行下面的命令来使用 yum 安装 Redis&#xff1a; sudo yum install redis 启动 Redis 服务。安装完成后&#xff0c;你可以通过运行下面的命令来启动 Redis 服务&#xff1a; sudo systemctl start redis 设置 Redis 服务…

Eclipse - 查看工程或者文件的磁盘路径

Eclipse - 查看工程或者文件的磁盘路径 1. Help -> Eclipse Marketplace -> Find: Explorer -> Eclipse Explorer 4.1.0 -> Install2. right-click -> Open in ExplorerReferences 1. Help -> Eclipse Marketplace -> Find: Explorer -> Eclipse Explo…