LeetCode 0429.N 叉树的层序遍历:广度优先搜索(BFS)

【LetMeFly】429.N 叉树的层序遍历:广度优先搜索(BFS)

力扣题目链接:https://leetcode.cn/problems/n-ary-tree-level-order-traversal/

给定一个 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)

和之前二叉树的广度优先搜索一样,我们可以使用一个队列来存放每一层的节点,再让这些节点依次出队,并将节点的孩子们(如有)入队。

  • 时间复杂度 O ( N ) O(N) O(N),其中 N N N是节点个数
  • 空间复杂度 O ( N 2 ) O(N2) O(N2),其中 N 2 N2 N2是节点最多的一层的节点数

AC代码

C++
class Solution {
public:
    vector<vector<int>> levelOrder(Node* root) {
        vector<vector<int>> ans;
        queue<Node*> q;
        if (root) {
            q.push(root);
        }
        while (q.size()) {
            ans.push_back({});
            for (int _ = q.size(); _ > 0; _--) {
                Node* thisNode = q.front();
                q.pop();
                ans.back().push_back(thisNode->val);
                for (Node* nextNode : thisNode->children) {
                    q.push(nextNode);
                }
            }
        }
        return ans;
    }
};
Python
# from typing import List, Optional

# Definition for a Node.
class Node:
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children

class Solution:
    def levelOrder(self, root: Optional[Node]) -> List[List[int]]:
        ans = []
        q = []
        if root:
            q.append(root)
        while q:
            ans.append([])
            for _ in range(len(q)):
                thisNode = q[0]
                q = q[1:]
                ans[-1].append(thisNode.val)
                for nextNode in thisNode.children:
                    q.append(nextNode)
        return ans

针对于Python的语法糖,若使用两个数组可以很大程度上减少代码量(甚至提高效率):

# from typing import Optional, List

# Definition for a Node.
class Node:
    def __init__(self, val=None, children=None):
        self.val = val
        self.children = children

class Solution:
    def levelOrder(self, root: Optional[Node]) -> List[List[int]]:
        ans = []
        a = []
        if root:
            a.append(root)
        while a:
            ans.append([thisNode.val for thisNode in a])
            a = [nextChild for thisNode in a for nextChild in thisNode.children]
        return ans

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/136136336

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nba2k24 郭艾伦面补

nba2k24 郭艾伦面补 nba2k23-nba2k24通用 郭艾伦面补 下载地址&#xff1a; https://www.changyouzuhao.cn/9460.html

03 类和对象 1

目录 面向过程和面向对象初步认识类的引入类的定义类的访问限定符及封装类的作用域类的实例化类的对象大小的计算类成员函数的this指针 1. 面向过程和面向对象初步认识 c语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析求解问题的步骤&#xff0c;通过函数调用逐步…

免费邮件群发工具有哪些?群发邮件的软件?

免费邮件群发软件盘点&#xff01;EDM免费邮件营销软件哪个好&#xff1f; 电子邮件营销已成为许多企业和个人推广的重要手段。而免费邮件群发工具则成为了这些用户节约成本、提高效率的首选。蜂邮将为您详细介绍几款备受欢迎的免费邮件群发工具&#xff0c;帮助您在众多选择中…

从kafka如何保证数据一致性看通常数据一致性设计

一、前言 在数据库系统中有个概念叫事务&#xff0c;事务的作用是为了保证数据的一致性&#xff0c;意思是要么数据成功&#xff0c;要么数据失败&#xff0c;不存在数据操作了一半的情况&#xff0c;这就是数据的一致性。在很多系统或者组件中&#xff0c;很多场景都需要保证…

JVM-JVM调优基础(理论)

申明&#xff1a;文章内容是本人学习极客时间课程所写&#xff0c;作为笔记进行记录&#xff0c;文字和图片基本来源于课程资料&#xff0c;在某些地方会插入一点自己的理解&#xff0c;未用于商业用途&#xff0c;侵删。 原资料地址&#xff1a;课程资料 JVM参数 标准参数 …

- 工程实践 - 《QPS百万级的有状态服务实践》02 - 冷启动和热更新

本文属于专栏《构建工业级QPS百万级服务》 继续上篇《QPS百万级的有状态服务实践》01 - 存储选型实践。如图1架构&#xff0c;我们已经解决了数据生产的问题。 图1 但是我们的服务已经在运行了&#xff0c;并实时处理大量的请求&#xff0c;我们如何把内存中的数据版本更新呢。…

网页中实现打开qq添加群聊

网页中实现打开qq添加群聊 效果 登录qq群管理后台 1. https://qun.qq.com/#/handy-tool/join-group 2 . 复制生成的链接 代码 在html中使用的话就直接粘贴到对应的内容里面就行 如果是添加点击事件的话&#xff1a; <div click"joinQQGroup">添加群聊</…

Vue23 数据监测总结

代码 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>总结数据监视</title><style>button{margin-top: 10px;}</style><!-- 引入Vue --><script type"text/javascript" src"…

mqtt 协议中的 QoS等级介绍

一、QoS等级 MQTT设计了一套保证消息稳定传输的机制&#xff0c;包括消息应答、存储和重传。在这套机制下&#xff0c;提供了三种不同层次QoS&#xff08;Quality of Service&#xff09;&#xff1a; QoS0&#xff0c;At most once&#xff0c;至多一次&#xff1b;QoS1&…

OpenAI全新发布的Sora,到底意味着什么?

16日凌晨&#xff0c;OpenAI发布了文本视频的工具&#xff08;text-do-video&#xff09;Sora&#xff0c;整个世界再次被震撼。 Sora的出现&#xff0c;到底意味着什么&#xff1f; 目录 Sora的背景与概述Sora是什么&#xff1f;能为我们做些什么&#xff1f;存在的一些问题 文…

C++ 里设置Expose on Spawn csv 通过 UStruct 导入为 DataTable

一.蓝图里面暴露的设置如下&#xff1a; C 中写法如下&#xff1a; 属性如下&#xff1a; 关卡蓝图中Spawn时会有 参数接口 二. 创建UObject类&#xff0c;并在C中声明结构体。继承FTableRowBase 在Excel里&#xff0c;创建对应csv文件 如果在头文件修改了属性&#xff0c;使用…

情人节官宣频发,白敬亭宋轶等多对情侣陷情风。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 情人节甜蜜满溢&#xff0c;娱乐圈情侣们争相晒幸福。2024年&…

Rust Vs Go:从头构建一个web服务

Go 和 Rust 之间的许多比较都强调它们在语法和初始学习曲线上的差异。然而&#xff0c;最终的决定性因素是重要项目的易用性。 “Rust 与 Go”争论 Rust vs Go 是一个不断出现的话题&#xff0c;并且已经有很多关于它的文章。部分原因是开发人员正在寻找信息来帮助他们决定下…

CogCopyRegionTool

关于visionpro工具操作原理文章甚少&#xff0c;以下是本人自己查阅visionpro官方文档完成的&#xff1a; “复制区域”工具允许您对单个图像或两个独立的图像执行多个复制操作&#xff1a; 将输入图像的一部分复制到新的输出图像。 1、 将输入图像的一部分复制到现有的目标…

一杯咖啡一根烟,一个bug改一天,让程序员崩溃的43个瞬间

一杯咖啡一根烟&#xff0c;一个bug改一天 新年刚刚开始&#xff0c;我估计大家都还处于打发时间的状态吧&#xff01;让我们来谈谈一些轻松的内容&#xff0c;调整一下心情&#xff0c;希望所有在座的朋友&#xff0c;在2024年能够bug多多&#xff0c;收入多多&#xff0c;美女…

Apache DolphinScheduler中ZooKeeperCDH不兼容问题的解决方案

背景 看到Apache DolphinScheduler社区群有很多用户反馈和讨论这块问题&#xff0c;针对不兼容的问题&#xff0c;不仅需要自己重新编译各一个新包&#xff0c;而且因为默认是使用zk-3.8的配置&#xff0c;所以会出现不兼容问题。使用zk-3.4配置即可适配3.4.x 解决办法&#…

北京地区MySQL培训课程:深度解析查询语句中的WHERE条件设置

MySQL如果在查询时想要获取满足的条件的记录&#xff0c;就需要使用WHERE子句&#xff0c;WHERE子句用于在 MySQL 中过滤查询结果&#xff0c;只返回满足条件的数据记录。 语法格式&#xff1a; SELECT column1, column2, ...FROM table_name WHERE condition; SELECT 列名,…

【Linux】Framebuffer 应用

# 前置知识 LCD 操作原理 在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。 Frame 是帧的意思&#xff0c; buffer 是缓冲的意思&#xff0c;这意味着 Framebuffer 就是一块内存&#xff0c;里面保存着一帧图像。 Framebuffer 中保存着一帧图像的每一个像素颜色值&…

才气系统与逻辑系统道装实现的比较

才气系统与逻辑系统道装实现的比较 道装道装思想简介烛火流形学习引擎&#xff0c;流形学习的引入王船山信息熵&#xff0c;简称王船山熵&#xff1b;凝聚态数学可计算函数科学方法道装由来琴语言简介逻辑与才气的逐层比较表格&#xff08;王船山熵&#xff09; 道装 道装思想…

LeetCode 0589.N 叉树的前序遍历:深度优先搜索(DFS)

【LetMeFly】589.N 叉树的前序遍历&#xff1a;深度优先搜索(DFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/n-ary-tree-preorder-traversal/ 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表…