图解LeetCode——102. 二叉树的层序遍历

news2024/9/22 21:32:14

一、题目

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

二、示例

2.1> 示例 1:

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

2.2> 示例 2:

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

2.3> 示例 3:

输入】root = []
输出】[]

提示:

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

三、解题思路

3.1> 思路1:广度优先遍历

根据题目要求,我们要实现二叉树的从上到下从左向右的遍历输出。那么每一层我们将其保存到一个List中,然后所有二叉树节点都遍历完毕后,就输出List<List<Integer>> result即可。

那么我们可以首先采用广度优先遍历方式,去输出每个节点,处理方式就是首先我们来创建一个队列deque,用于暂存遍历的节点。操作伪代码如下所示:

int num; // 第N层节点个数
while(deque不为空){
   num = deque中存储的元素个数;
     创建新的list;
   for (int i = 0; i < num; i++) {
         从deque中获得Node节点;
         将Node节点的val值保存到list中;
         将Node的左子树leftNode存放到deque中;
         将Node的右子树rightNode存放到deque中;
   }
}

其中,关键的点就是通过deque来暂存节点,以及每次从deque中获取num个节点元素。因为deque中有可能存入的是两个层中的Node节点,那么就无法区分哪些是一层的了。为了便于理解,下面我们以输入root = [3,9,20,null,null,15,7]为例,看一下具体的处理过程。

3.2> 思路2:深度优先遍历

除了广度优先,我们也可以采用深度优先算法来进行解题,这里面我们可以通过借助递归的方式,将level层级作为方法入参,然后利用list.get(level)的方式获得这个层级的节点值集合。操作步骤如下所示:

步骤1】遍历某level层节点,如果list中没有创建该层集合,则创建,然后将节点的val值保存进去。如果已创建,则通过list.get(level)的方式获取该层集合。
步骤2】获取leftNode传入递归方法中,并且level入参值加1;
步骤3】获取rightNode传入递归方法中,并且level入参值加1;

以上就是深度优先遍历的解题思路,为了便于理解,下面我们以输入root = [3,9,20,null,null,15,7]为例,看一下具体的处理过程。

四、代码实现

4.1> 实现1:广度优先遍历

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> result = new ArrayList();
        if (root == null) return result;
        Deque<TreeNode> deque = new ArrayDeque();
        deque.addLast(root);
        int num;
        while(!deque.isEmpty()) {
            num = deque.size();
            LinkedList<Integer> item = new LinkedList<>();
            for (int i = 0; i < num; i++) {
                TreeNode node = deque.removeFirst();
                item.addLast(node.val);
                if (node.left != null) deque.addLast(node.left);
                if (node.right != null) deque.addLast(node.right);
            }
            result.add(item);
        }
        return result;
    }
}

4.2> 实现2:深度优先遍历

class Solution {
    List<List<Integer>> result = new ArrayList();
    public List<List<Integer>> levelOrder(TreeNode root) {
        dfs(root, 0);
        return result;
    }

    public void dfs(TreeNode node, int level) {
        if (node == null) return;
        if (result.size() == level) result.add(new ArrayList());
        result.get(level).add(node.val);
        dfs(node.left, level + 1);
        dfs(node.right, level + 1);
    }
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

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

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

相关文章

Redis7实战加面试题-高阶篇(手写Redis分布式锁)

手写Redis分布式锁 面试题&#xff1a; 1.Redis除了拿来做缓存&#xff0c;你还见过基于Redis的什么用法? 数据共享&#xff0c;分布式session分布式锁 全局ID 计算器、点赞位统计 购物车 轻量级消息队列&#xff08;list&#xff0c;stream&#xff09; 抽奖 点赞、签到、打…

功率信号源驱动电路工作原理是什么

功率信号源驱动电路是一种能够将低功率、微弱的信号放大到足够高的功率水平的电路。在现代通信、医疗、工业等领域中&#xff0c;功率信号源驱动电路被广泛应用。下面&#xff0c;我们将对功率信号源驱动电路进行详细的介绍。 图&#xff1a;ATG-2000系列功率信号源 功率信号源…

【大数据学习篇12】 Spark项目实战-数据可视化

学习目标/Target 了解数据可视化系统架构 掌握Phoenix集成HBase 熟悉建立Phoenix与HBase表映射 了解Spring Boot项目的创建 掌握Java Web项目中实体类的创建 掌握Java Web项目中数据库访问接口的创建 掌握Java Web项目中控制器类的创建 熟悉Java Web项目中HTML页面的创建…

23种设计模式之模板方法模式(Template Method Pattern)

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将23种设计模式中的模板方法模式&#xff0c;此篇文章为一天学习一个设计模式系列文章&#xff0c;后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大…

第十九章行为型模式—中介者模式

文章目录 中介者模式解决的问题结构实例存在的问题适用场景 中介者模式和代理模式的区别代理模式中介模式桥接模式总结 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务&#xff0c;它涉及算法…

day0 -- Mysql专业名词认识部分

数据库(database)/资料库 常见的数据库/资料库且以物理形式存在的&#xff0c;比如图书馆&#xff0c;再比如书柜。 是一种有组织的存放资料/数据的容器。 数据库管理系统(DBMS) 创建数据库和管理数据库的系统&#xff0c;可以对数据库进行组织、管理、访问、修改等操作的一套…

真的被00后卷麻了,还好我很会划水~

前情提要 鉴于目前测试就业越来越严峻&#xff0c;内卷也成了测试领域的代名词了。我的一个HR朋友告诉我&#xff0c;现在测试岗的投递比已经将近1000&#xff0c;也就是一个岗位差不多有千份简历投进来&#xff0c;实在是恐怖&#xff01; 前段时间我也去面试了一些公司&…

C4D 必备的 7 个素材网站!

C4D近几年来是一个非常热门的专业/职业&#xff0c;特别是在建模行业大多数时候都会选择使用C4D进行&#xff0c;相信也有很多粉丝朋友喜欢C4D这个类别。 但是我在一些网站上&#xff0c;经常会看到有人说想要一些C4D的素材&#xff0c;但是不知道去哪里找&#xff0c;也不知道…

redis 数据结构String之SDS

redis字符串(String)内存结构&#xff1a; 字符串对象底层数据结构实现为简单动态字符串&#xff08;SDS&#xff09;和直接存储&#xff0c;但其编码方式可以是int、raw或者embstr&#xff0c;区别在于内存结构的不同。 int编码 字符串保存的是整数值&#xff0c;并且这个正式…

iOS 16 UI 设计系统免费在线使用方法

1、iOS 16 UI 设计系统中有什么&#xff1f; iOS 16 UI 设计系统通常包含以下组件和元素&#xff1a; 1. 按钮&#xff1a;包括操作按钮、图标按钮、导航按钮、滚动按钮、切换按钮、单选按钮、复选框按钮、呼叫按钮等各种类型的按钮。 2. 窗口和 UI 控件&#xff1a;包括标签…

JAVA变量在不同情况下未赋值与默认初始值

目录 一、默认初始值 二、本地变量 代码 运行结果 二、实例变量 代码 运行结果 三、本地变量和实例变量的区别 1.作用域 2.生命周期 3.初始化 一、默认初始值 数据类型初始值数据类型初始值byte0long0Lchar‘u0000’float0.0fshort0double0.0int0booleanfalse引用nul…

人工智能-机器学习人工神经网络

机器学习 机器学习部分主要学习的内容是朴素贝叶斯算法和决策树算法。 决策树算法 决策树算法是机器学习中常用的一种分类算法&#xff0c;在决策树中&#xff0c;使用各个属性进行分类&#xff0c;选取每次分类的属性的方式有多种。最简单的是ID3算法&#xff0c;使用信息增…

【论文阅读】Robust Object-based SLAM for High-speed Autonomous Navigation

一、问题概述 这篇文章是在QuadricSLAM的基础上进行的改进&#xff0c;也就是说依然使用了椭球对物体进行描述&#xff0c;论文中提到使用椭球本身是因为椭球其参数化表示可以完全通过相机的检测框来进行约束&#xff0c;二次曲面与对偶二次曲面可以参考链接&#xff0c;文章使…

uniapp-前端 二维码、扫码、长按、识别等问题

一&#xff1a;识别&#xff1a;图片二维码url&#xff1a; 后端返回二维码的图片url&#xff0c;则直接展示&#xff0c;做长按手势识别&#xff0c;再调用方法即可。 <mage>标签长按识别实现&#xff08;微信版本>2.7.0&#xff09; <image show-menu-by-long…

JS数组题

从0到1&#xff1a;JavaScript快速上手第六章课后习题 一、单选题1&#xff0e;下面有一个数组&#xff0c;该数组中数值最小和数值最大的元素的下标分别是&#xff08; &#xff09;。 var arr[3,9,1,12,36,50,21] A&#xff0e;2, 5 B&#xff0e;3, 6 C&#xff0e;2, 6 D&…

【刷题】144. 二叉树的前序遍历

144. 二叉树的前序遍历 一、题目描述二、示例三、实现总结 144. 二叉树的前序遍历 一、题目描述 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 二、示例 示例1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#…

第十五章行为性模式—命令模式

文章目录 命令模式解决的问题结构实例存在的问题适用场景 JDK 源码 - Runnable 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。行为型模式分为类…

OW-DETR: Open-world Detection Transformer(论文翻译)

文章目录 OW-DETR: Open-world Detection Transformer摘要1.介绍2.开放世界检测的transformer2.1整体架构2.2.多尺度上下文编码2.3.注意力驱动的伪标签2.4 新类分类2.5.前景物体2.6.训练与推理 3.实验3.1.最新技术水平比较3.2.增量目标检测3.3 消融实验 4.与现有技术的关系5.结…

【干货收藏】 隔离驱动SLMi335/SLMi335H 电路方案分享

数明深力科SLMi33X系列SLMi335/SLMi335H首款单通道带DESAT保护功能的IGBT/SiC隔离驱动器。内置快速去饱和(DESAT) 故障检测功能、米勒钳位功能、漏极开路故障反馈、软关断功能以及可选择的自恢复模式&#xff0c;兼容光耦隔离驱动器。 SLMi33X系列SLMi335/SLMi335H的DESAT阈值…

如何搭建高质量的 B 端产品帮助体系?

在B2B市场中&#xff0c;产品的质量和支持服务对于企业的成功至关重要。帮助中心是B2B企业提供优质支持服务的重要组成部分。那么&#xff0c;如何搭建高质量的B端产品帮助体系呢&#xff1f;本文将为大家介绍一些关键的步骤和方法。 一、了解用户需求 首先&#xff0c;要搭建…