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

2023-11-17

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

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

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

示例 2:

输入:root = [1]
输出:[[1]]

示例 3:

输入:root = []
输出:[]

提示:

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

思路:利用队列 queue 先进先出的特性,按层次逐层遍历

时间复杂度:O(N)

空间复杂度:O(N)

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func levelOrder(root *TreeNode) [][]int {
    if root == nil {
        return [][]int{}
    }

    res := make([][]int, 0)
    queue := []*TreeNode{root} // 根节点先入队

    for len(queue) > 0 {
        subRes := make([]int, 0)
        length := len(queue)    // 提前缓存上一轮queue大小,避免在内循环中append导致queue长度变化
        for i := 0; i < length; i++ {
            root := queue[0]
            subRes = append(subRes, root.Val)
            queue = queue[1:]   // pop

            if root.Left != nil {
                queue = append(queue, root.Left)
            }

            if root.Right != nil {
                queue = append(queue, root.Right)
            }
        }
        res = append(res, subRes)
    }

    return res
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode 102. 二叉树的层序遍历BFS 的相关文章

  • 栈、队列的基本概念和操作

    目录 一 栈 stack 了解 1 1 栈的实现和操作 二 队列 queue 了解 2 1 队列的实现与操作 2 2 双端队列 一 栈 stack 了解 概念 栈 stack 有些地方称为堆栈 是一种容器 可存入数据元素 访问元素 删除元素
  • 02线程池的结构体描述信息

    02线程池的结构体描述信息 01线程池原理剖析 02线程池的结构体描述信息 03线程池的各个函数解析 04线程池完整的头文件和实现文件 c 直接看代码 代码里有详细的注释 描述任务队列的结构体 typedef struct void fun
  • 数据结构有哪些

    概念 数据结构 数据用什么样的方式组合在一起 数据结构是计算机存储数据的方式 指相互之间存在一种或多种特定关系的数据元素集合 常见数据结构 数据存储的常用结构有 栈 队列 数组 链表和红黑树 栈 stack 又称堆栈 它是运算受限的线性表
  • 使用c语言实现队列(图解push和pop操作&&附完整代码)

    相关定义和图文解释 队列是一种只能从表的一端存数据另一端取数据且遵循先进先出原则的线性存储结构 在队列的一端只能插入元素 这一端叫做队尾 另一端只能删除元素 这一端叫作队首 在接下来我们使用链表来实现队列 其中我们主要看一下关于对队列的两种
  • ztree中获取某节点的所有叶子节点

    var setting data simpleData enable true callback onClick treenodeClick function treenodeClick event treeId treeNode clic
  • (Java)leetcode-23 Merge k Sorted Lists(合并K个排序链表)

    题目描述 合并 k 个排序链表 返回合并后的排序链表 请分析和描述算法的复杂度 示例 输入 1 gt 4 gt 5 1 gt 3 gt 4 2 gt 6 输出 1 gt 1 gt 2 gt 3 gt 4 gt 4 gt 5 gt 6 思路1
  • leetcode 028.实现strStr(),即查找重复字符串(KMP算法)

    前言 本题是经典的字符串单模匹配的模型 因此可以使用字符串匹配算法解决 常见的字符串匹配算法包括暴力匹配 Knuth Morris Pratt 算法 Boyer Moore 算法 Sunday 算法等 本文 前言 本题是经典的字符串单模匹配
  • BlockingQueue、ArrayBlockingQueue、LinkedBlockingQueue原理分析

    阻塞队列与非阻塞队 阻塞队列与普通队列的区别在于 当队列是空的时 从队列中获取元素的操作将会被阻塞 或者当队列是满时 往队列里添加元素的操作会被阻塞 试图从空的阻塞队列中获取元素的线程将会被阻塞 直到其他的线程往空的队列插入新的元素 同样
  • RocketMQ-名词和架构

    RocketMQ rocketMQ是做什么的我就不用解释了吧 以及他的背景 本文主要是为了让大家明白RocketMQ的工作原理 架构图 上图 双箭头代表是双向通信 ProducerGroup和ConsumerGroup以及Broker集群
  • 【Leetcode】863. 二叉树中所有距离为 K 的结点

    题目描述 题解 用map记录每个结点的父结点 然后让dfs从target结点开始 假设target就是根结点 然后递归时纪录深度 只要深度等于k 就是和target的距离等于k 就可以存入list 执行用时 14 ms 在所有 Java 提
  • 红黑树(算法导论版)

    1 定义 1 每个节点是红色或者黑色的 2 根节点是黑色的 3 所有叶子结点 NIL 都是黑色的 4 如果一个节点是红色 则它的两个子节点都是黑色的 5 对每个节点 从该节点到其所有后代叶节点的简单路径上 均包含相同数目的黑色节点 2 性质
  • 力扣 - 1、俩数之和

    题目 给定一个整数数组 nums 和一个整数目标值 target 请你在该数组中找出 和为目标值 的那 两个 整数 并返回它们的数组下标 你可以假设每种输入只会对应一个答案 但是 数组中同一个元素在答案里不能重复出现 你可以按任意顺序返回答
  • C/C++语言实现的一个缓存队列

    C C 语言实现的一个缓存队列 完整代码下载地址 https gitee com yzhengBTT QueueBuffer 使用方法 对于C语言 队列的创建分两种 1 静态创建 队列大小 define QUEUE SIZE 10 队列数据
  • (十三):图

    1 图的基本介绍 1 1为什么要有图 前面我们学到了线性表和树 线性表局限于直接前驱和一个直接后继结点的关系 树也只能有一个直接前驱也就是父节点 当我们需要多对多关系时候 就需要图 1 2图的举例说明 图是一种数据结构 其中结点可以具有零个
  • 【Leetcode】225. 用队列实现栈

    题目描述 请你仅使用两个队列实现一个后入先出 LIFO 的栈 并支持普通栈的全部四种操作 push top pop 和 empty 实现 MyStack 类 void push int x 将元素 x 压入栈顶 int pop 移除并返回栈
  • 模糊匹配之——BK树与拼写纠正

    介绍 拼写纠错功能常常出现在比较高级的文本编辑应用中 例如大家熟知的word 高级一点的IDE例如Jet Brains系列 在一些在线翻译上 也有自动校正拼写的功能 例如谷歌翻译 原理 拼写纠正的实现方式有多种 这里使用的是一种名为BK树的
  • 力扣 - 102、二叉树的层序遍历(剑指Offer - 面试题32:从上到下打印二叉树)

    题目 给你一个二叉树 请你返回其按 层序遍历 得到的节点值 即逐层地 从左到右访问所有节点 示例 二叉树 3 9 20 null null 15 7 3 9 20 15 7 输出层序遍历的结果 3 9 20 15 7 分析 迭代法 用一个队
  • 堵塞队列之ArrayBlockingQueue和LinkedBlockingQueue解析

    在线程池创建的时候 需要传一个堵塞队列来维护需要执行的线程任务 其中最常用的是ArrayBlockingQueue和LinkedBlockingQueue 他们都继承了BlockingQueue接口 ArrayBlockingQueue 一
  • 堆栈01--用两个栈实现队列

    堆栈01 用两个栈实现队列 jz05 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 用两个栈来实现一个队列 完成队列的Push和Pop操作 队列中的元素为int类型 测试用例 队列先进先出 输入 1 2 输出 1 2 解析
  • 【Leetcode】438. 找到字符串中所有字母异位词

    Leetcode 438 找到字符串中所有字母异位词 题目链接 代码 题目链接 Leetcode 438 找到字符串中所有字母异位词 代码 func findAnagrams s string p string int 枚举p串 统计p串字

随机推荐

  • 图片归一化 img/255.0 和img/127.5 - 1对比

    在代码中看到图像的2种处理方式 img 255 0 img 127 5 1 第一种是对图像进行归一化 范围为 0 1 第二种也是对图像进行归一化 范围为 1 1 这两种只是归一化范围不同 为了直观的看出2种区别 分别对图像进行两种处理 从图
  • 题目 1056: 二级C语言-温度转换

    输入一个华氏温度 要求输出摄氏温度 公式为 保留两位小数 样例输入 40 00 样例输出 40 00 这道题很简单 数据代入公式就行 记得设置double或者float的浮点型 用于保留两位小数 对于保留小数 1是可以用iomanip的co
  • 汇编语言11之中断和int指令以及端口

    中断第处理外部突发事件的一个重要技术 硬件中断 外部中断 一般是外设发出的中断 内部中断 硬件出错或运算出错引起的中断 不可被屏蔽 软件中断 中断处理程序 CPU必须建立中断信息和中断处理程序之间的联系 中断信息中包含 1byte 中断类型
  • github fork别人的项目到自己仓库并进行贡献

    原文地址 转载请注明出处 https blog csdn net qq 34021712 article details 117260462 王赛超 目录 第一步 主账号上创建一个新的仓库 git demo 1 在主账号点击New创建一个新
  • React项目中关于onclick的学习

    onclick传递函数的格式 function e gt console log 我是一个函数 e
  • Nosql复习篇(三)

    Chapter3 5 1 Hadoop中的HDFS分布式文件系统解决了HBase的数据底层存储问题 实现了文件系统 数据分片 多副本容错 数据一致性等诸多功能 2 Hadoop最初的应用场景为搜索引擎的底层技术支持 3 核心组件 分布式文件
  • 慕课版软件质量保证与测试(第五章.课后作业)

    慕课版软件质量保证与测试 第五章 课后作业 一 选择题 二 填空题 三 判断题 四 解答题 一 选择题 1 软件测试是软件质量保证的重要手段 下述哪种测试是软件测试的最基础环节 A 集成测试 B 单元测试 C 系统测试 D 验收测试 参考答
  • 祝贺

    热烈祝贺合肥 NET俱乐部第二期技术沙龙圆满成功 感恩参与活动的每一位小伙伴 正是因为有你们才促成了这次聚会的成功 现对此次活动进行简单回顾并附上精彩的活动图片 每一位参与活动者名单 以及此次活动讲师分享的PPT供大家学习下载 作者 依乐祝
  • Python爬取旅游网站数据机票酒店价格对比分析

    本文将介绍如何使用Python爬虫从旅游网站上获取机票和酒店的价格数据 并实现价格对比分析 帮助你做出明智的旅行决策 我们提供了完善的方案和代码 让你能够轻松操作并获得实际价值 使用Python爬虫获取旅游网站上的机票和酒店价格数据 可以帮
  • CSS样式显示异常问题

    解决方法 对于服务端跳转 访问的viewUser jsp的CSS文件引入不需要要加 效果 当服务端访问viewUser jsp正常 但如果客户端地址栏范围 就还是CSS异常 不影响正常功能
  • python关掉警告信息(warning)

    在GCN normalization由于版本问题出现 除0 警告 RuntimeWarning divide by zero encountered in power d inv sqrt np power row sum 0 5 flat
  • flutter doctor --android-licenses报错解决方案

    C Users 32148 gt flutter doctor android licenses Flutter assets will be downloaded from https storage flutter io cn Make
  • 小米手环nfc门卡摸拟成功后不能开门_如何使用小米手环5 NFC版进行门卡模拟(如公司门禁卡、小区门禁卡、学校门禁卡等)?...

    由于本人最近购入了小米手环5 NFC版 所以对小米手环模拟门禁卡比较清楚一点 说一下用该手环模拟门禁的方法吧 我本人模拟的是学校公寓的门禁卡 不过学校的门禁卡是加密卡 可能操作起来稍微比不加密的门禁卡麻烦一点 因为不加密的门禁卡直接就可以模
  • PLSQL之动态SQL与异常

    1 动态 SQL 动态 SQL 是指在PL SQL程序执行时生成的 SQL 语句 编译程序对动态 SQL 不做处理 而是在程序运行时动态构造语句 对语句进行语法分析并执行 DDL 语句命令和会话控制语句不能在 PL SQL 中直接使用 但是
  • 微信公众号-测试号

    最近碰到了一个H5的公众号项目 需要openid来判断用户是否存在 视乎好多年都没碰这玩意了 完全忘记了 挨着看文档 一路各种坑 好不容易用测试号把本地测试环境调通了 环境不同可能使用的方法方式都不一样 微信测试号 需要微信扫码登陆 1 获
  • unity图片相似度识别

    public static SimilarPhoto Instance
  • 2022最新快捷键大全

    一 常用快捷键 ctrl c v 复制 粘贴 ctrl a 全选 ctrl s 保存 ctrl f 查找 ctrl z 撤销 ctrl x 剪切 win r 命令运行框 win d 隐藏 显示当前页面或者应用 win l 锁屏 alt Ta
  • json数组如何转换成string类型(超级好用)

    先上代码 下面解释 这个jar包地址之后更新的时候再给出来的 包的地址 JSONObject job ace text a 此时job里面的数据格式为 logid 2075 words result words acb words and
  • Using / for division outside of calc() is deprecated and will be removed in Dart Sass 2.0.0

    项目 taro3 vue3 描述 运行时警告 Deprecation Warning Using for division outside of calc is deprecated and will be removed in Dart
  • LeetCode 102. 二叉树的层序遍历BFS

    LeetCode 102 二叉树的层序遍历BFS 给你二叉树的根节点 root 返回其节点值的 层序遍历 即逐层地 从左到右访问所有节点 示例 1 输入 root 3 9 20 null null 15 7 输出 3 9 20 15 7 示