【leetcode】----102二叉树的层序遍历

2023-11-14

102二叉树的层序遍历

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

 

示例:
二叉树:[3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

BFS详解图片来源

BFS广度遍历公式:
BFS广度遍历(图片来源于上面链接)

bfs遍历所需要的数据结构为队列,当需要广度遍历时可先写出下面的公式。

void bfs(TreeNode root) {
    Queue<TreeNode> queue = new ArrayDeque<>();
    queue.add(root);
    while (!queue.isEmpty()) {
        // Java 的 pop 写作 poll(),出队列并返回节点。
        TreeNode node = queue.poll(); 
        // 将已出队列节点的子节点插入队列
        if (node.left != null) {
            queue.add(node.left);
        }
        if (node.right != null) {
            queue.add(node.right);
        }
    }
}

leetcode题解:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    List<List<Integer>> list = new ArrayList();
    public List<List<Integer>> levelOrder(TreeNode root) {
        bfs(root);
        return list;
    }
    // bfs遍历
    void bfs(TreeNode root) {
        Queue<TreeNode> queue = new ArrayDeque();
        if (root != null) {
            queue.add(root);
        }
        // 执行入队与出队操作,直至全部出队
        while (!queue.isEmpty()) {
            // 计算每一层节点数量n,连续执行n次出队入队。当前层全部出队并统计val后再进入下一层。
            int size = queue.size();
            List<Integer> list2 = new ArrayList();
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                list2.add(node.val);
                if (node.left != null) {
                    queue.add(node.left);
                }
                if (node.right != null) {
                    queue.add(node.right);
                }
            }
            list.add(list2);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【leetcode】----102二叉树的层序遍历 的相关文章

  • 用栈实现队列(OJ中报错的处理)

    用栈实现队列 ERROR AddressSanitizer myQueueFree函数中栈的释放处现了问题 没有调用StackDestory而是直接free了 这个是栈初始化时 capacity与malloc申请的空间大小没有匹配 请你仅使
  • LinkedBlockingQueue 的 Java 性能问题

    这是我在 stackoverflow 上的第一篇文章 我希望有人能帮助我 我的 Java 6 性能大幅下降LinkedBlockingQueue 在第一个线程中 我生成一些对象并将其推入队列 在第二个线程中 我将这些对象拉出来 当take
  • Pygame 事件队列

    我想知道是否有一种使用方法poll or get 而不从队列中删除事件 在我的游戏中 我检查不同位置的输入 不仅在主循环中 有时我需要在不同位置检查相同的事件 但是当我检查它时 它会将其从队列中删除 我尝试使用peek 但问题是我无法获得与
  • 从队列中获取最后 n 个项目

    我看到的一切都是关于列表的 但这是关于events queue queue 这是一个包含我想要提取的对象的队列 但是我如何从该队列中获取最后 N 个元素 根据定义 你不能 你可以做的是使用循环或理解get the first 你不能get从
  • 如何获取运行任务的队列 - celery

    我是新使用芹菜 有一个问题 我有这个简单的任务 app task name test install queue def test install queue return subprocess call exit 0 shell True
  • 如何在 Lumen 5.5 中将作业分派到特定队列

    在标准作业中 我使用此方法来调度作业 dispatch new PurchaseJob trxId method params 接下来我想调度另一个作业来发送电子邮件 但我想将其拆分到另一个单独的队列 根据我在 Laravel 5 5 文档
  • Swift:为蓝牙中央管理器选择队列

    我正在开发一个应用程序 该应用程序将通过 BLE 与智能设备连接并与其通信 问题是 在哪个队列中处理蓝牙事件的最佳实践是 我读过很多教程 在所有教程中我发现了这一点 centralManager CBCentralManager deleg
  • 并行处理队列的好策略是什么?

    我正在编写一个程序 需要递归搜索文件夹结构 并且希望与多个线程并行执行此操作 我已经编写了相当简单的同步方法 最初将根目录添加到队列中 然后将目录出队 对其子目录进行排队等 直到队列为空 我会用一个ConcurrentQueue
  • Java 中的列表、队列和集合

    列表 队列和集合有什么区别 简单来说 A list是对象的有序列表 其中同一对象很可能出现多次 例如 1 7 1 3 1 1 1 5 谈论列表中的 第三个元素 是有意义的 您可以在列表中的任意位置添加元素 更改列表中的任意位置的元素或从列表
  • 如何将 javascript 函数存储在队列中以便最终执行它们[重复]

    这个问题在这里已经有答案了 我在 javascript 中创建了一个 Queue 类 我想将函数作为数据存储在队列中 这样我就可以建立请求 函数调用 并在需要时响应它们 实际执行函数 有没有什么方法可以将函数存储为数据 有点类似于 setT
  • 使用队列进行基数排序

    我想创建一个基数排序 http en wikipedia org wiki Radix sort使用队列实现 我无法弄清楚我的代码的哪一部分有问题或者我应该阅读哪些资源 我的代码可能完全错误 但这是我的实现 没有任何帮助 我还没有参加数据结
  • 使用 Tensorflow 对象检测 api 打乱训练数据集

    我正在使用 Faster RCNN 模型和 Tensorflow 对象检测 API 来开发徽标检测算法 我的数据集按字母顺序排列 因此有一百个阿迪达斯徽标 然后是一百个苹果徽标等 我希望在训练时对其进行洗牌 我在配置文件中添加了一些值 tr
  • 队列上的 IEnumerable 迭代器是否应该使项目出列

    我创建了一个自定义通用队列 它实现了通用 IQueue 接口 该接口使用 System Collections Generic 命名空间中的通用队列作为私有内部队列 示例已清除不相关的代码 public interface IQueue
  • 使用 Celery 创建动态队列

    这是我的场景 当用户登录我的网站时 我会为给定用户排队一堆任务 通常每个任务需要 100 毫秒 每个用户有 100 多个任务 这些任务排队到默认的 Celery 队列中 并且我有数百个工作线程正在运行 当任务在后端完成时 我使用 webso
  • NodeJS 推送队列,由 Laravel Worker 消耗

    我正在尝试使用节点应用程序发送到 SQS 的消息 因此 推送 操作由服务器 A 上的 Node App 执行 监听 操作由服务器 B 上的 Laravel App 执行 我的问题 我不知道如何格式化要使用的有效负载php artisan q
  • Java 中保存最后 N 个元素的大小受限队列

    关于 Java 库的一个非常简单快速的问题 是否有一个现成的类可以实现Queue具有固定的最大大小 即它始终允许添加元素 但它会默默地删除头元素以为新添加的元素提供空间 当然 手动实现它很简单 import java util Linked
  • 将非泛型类扩展为泛型类

    org apache commons collections buffer 包中的 Java 类 CircularFifoBuffer 是非泛型的 可以存储任何类的对象 我想创建一个通用版本 它只能保存类 T 的对象 我的第一个想法是扩展
  • 如何向队列发送参数?

    请考虑以下工作
  • 使用 Java 中的映射实现的队列数据结构,大小限制为 5

    我有带有一些记录的地图 我想将该映射限制为仅 5 个元素 并且每当添加新元素时 应删除第一个元素 并应在映射的最后位置添加新元素 类似于 FIFO 的东西 任何人都可以建议我使用一个数据结构或解决方案本身 E g Map
  • Node Js:Redis 作业在完成其任务后未完成

    希望你们做得很好 我在我的 Nodejs 项目中实现了 BullMQ Bull 的下一个主要版本 来安排发送电子邮件的作业 例如 发送忘记密码请求的电子邮件 所以 我编写了如下所示的代码 用户服务 await resetPasswordJo

随机推荐

  • 【运维笔记】kafka跨域通信代理

    kafka跨域通信代理 场景描述 模拟思路 模拟环境说明 基础环境 kafka版本 环境部署 基础软件安装 编写kafka的docker compose yml文件 环境验证 解决方案 Kafka通信机制 解决思路 代理配置 验证是否满足要
  • 解决python中文乱码问题

    python输出中文乱码的问题相信大家都遇到过 那么应该如何解决呢 一 修改系统变量 依次打开 设置 gt 系统 gt 关于 gt 高级系统设置 gt 环境变量 gt 新建系统变量 新变量的变量名是 PYTHONIOENCODING 变量值
  • 《Win10——如何设置开机自启动项》

    Win10 如何设置开机自启动项 1 为需要自启动的程序创建快捷方式 2 Win R输入 shell startup 按下回车键出现一个文件夹 3 将快捷方式拖入文件夹中
  • Unity Mathf的一些函数

    1 Mathf Lerp float a float b float t 1 1 官方给出的解释为 用t在a和b之间做线性差值 参数t限制在0到1之间 当t 0时返回值为a 当t 1时返回值为b 当t为0 5时返回值为a到b的中间点 1 2
  • Computed 和 Watch 的区别

    1 computed计算属性 作用 1 解决模板中放入过多的逻辑会让模板过重且难以维护的问题 例如两个数据的拼接或字体颜色的判断 2 它支持缓存 只有依赖的数据发生了变化 才会重新计算 例如模板中多次用到数据拼接可以用计算属性 只执行一次计
  • 微信小程序播放音乐并同步一次显示一行歌词

    主要是对于歌词部分的描述 gitee项目仓库地址 https gitee com manster1231 master cloud music 点个star哦 1 总体思路 先在加载页面时异步获取歌词 根据 musicId 我们可以获取到该
  • Nginx proxy_pass反向代理动态端口

    背景 某项目需要播放第三方监控视频 我方访问域名假定为 my area com 第三方的域名假定为 video other com 域名不一致就导致浏览器跨域问题无法播放 且第三方拖拖拉拉不想解决 于是只有我方使用 nginx 做反向代理来
  • [CVPR-23-Highlight] Magic3D: High-Resolution Text-to-3D Content Creation

    目录 Abstract Background DreamFusion High Resolution 3D Generation Coarse to fine Diffusion Priors Scene Models Coarse to
  • jdk1.8 -- Collectors 的使用

    package com collector import java util ArrayList import java util Arrays import java util Collections import java util I
  • CNN核心概念理解

    卷积神经网络 Convolutional Neural Networks 简称CNN 是一种经典的神经网络算法 由于在图像识别领域取得的良好效果 随着人工智能的火热 它也受到越来越多的关注 CNN的核心概念卷积 池化听起来好像很神秘 了解之
  • stm32中断

    stm32中断 一 中断原理 二 CubeMX中断控制LED灯 一 项目生成 二 代码修改 三 编译运行 三 HAL库中断串口通信 一 新建项目 二 代码 三 烧录运行结果 四 总结 五 参考资料 一 中断原理 1 数据传输方式 2 全过程
  • leetcode:93. 复原 IP 地址

    题目链接 93 复原 IP 地址 题目描述 有效 IP 地址 正好由四个整数 每个整数位于 0 到 255 之间组成 且不能含有前导 0 整数之间用 分隔 例如 0 1 2 201 和 192 168 1 1 是 有效 IP 地址 但是 0
  • PermissionError: [Errno 13] Permission denied: ‘./MNIST_Dataset_Loader/dataset/train-images-idx3-uby

    在使用从github上下载的代码时报错 PermissionError Errno 13 Permission denied MNIST Dataset Loader dataset train images idx3 ubyte 解决办法
  • 【计算机网络系列】网络层⑫:虚拟专用网和网络地址转换NAT

    虚拟专用网和网络地址转换NAT 虚拟专用网 由于IP地址的紧缺 一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数 考虑到互联网并不很安全 一个机构内也并不需要把所有的主机接入到外部的互联网 实际上 在许多情况下 很多主机主要还是
  • 物联网的相关概念总结(逐渐更新)

    引言 本文主要总结了与物联网协议栈相关的概念 1 网络带宽 Network Bandwidth 网络带宽是指在单位时间 一般指的是1秒钟 内能传输的数据量 基本单位 bits per second 简写为bps 带宽的单位有 bps Kbp
  • 智能车图像处理12-进阶篇4--环岛辅助判断条件

    前言 希望大家多多点赞评论收藏哦 不懂的地方评论区留言就好 这篇文章主要讲述智能车图像处理中环岛辅助判断相关内容 一 图解分析 思路讲解 环岛辅助条件用于决定是否进入环岛判断函数 下面的辅助条件主要有两个方面 1 环岛所在边在赛道上必须有两
  • 学习笔记:Linux文件权限

    一般情况下 系统里的文件夹都是755权限 允许所有用户进入文件夹 一般情况下 root用户创建的文件夹权限是755 创建的文件权限是644 一般情况下 普通用户创建的文件夹权限是775 创建的文件权限是664 目录权限 可执行的操作 r l
  • 放苹果-递归

    include
  • java基础(二)循环语句及字符串的处理

    public class Test02 public static void main String args TODO 自动生成的方法存根 int sum 0 for int i 1 i lt 100 i 从1打印到100 System
  • 【leetcode】----102二叉树的层序遍历

    102二叉树的层序遍历 给你一个二叉树 请你返回其按 层序遍历 得到的节点值 即逐层地 从左到右访问所有节点 示例 二叉树 3 9 20 null null 15 7 3 9 20 15 7 返回其层次遍历结果 3 9 20 15 7 BF