算法通关村第六村-白银挑战树的层序遍历

news2024/11/27 9:36:54

大家好我是苏麟 , 今天说说数的层序遍历 .

层次遍历简介

广度优先在面试里出现的频率非常高,整体属于简单题,但是很多人面试遇到时就直接放弃了,实在可惜。我们本章就集中研究一下到底难在哪里。

广度优先又叫层次遍历,基本过程如下 :

层次遍历就是从根节点开始,先访问根节点下面一层全部元素,再访问之后的层次,类似金字塔一样一层层访问。我们可以看到这里就是从左到右一层一层的去遍历二叉树,先访问3,之后访问3的左右子孩子5和4,之后分别访问5 和4的左右子孩子[7,6]和[9],最后得到结果[3,5,4,7,6,9]。

这里的问题是怎么将遍历过的元素的子孩子保存一下呢,使用队列来存储能完美解决上述问题,例如上面的图中:

首先3入队。
然后3出队,之后将3的左右子孩子5和4 保存到队列中。
之后5出队,将5的左右子孩子7和6入队
之后4出队,将4的右子孩子9入队。
之后 7,6,9分别出队,此时都是叶子结点,只出队就行了

该过程不复杂 . 

基本的层次遍历

最简单的层次遍历

我们先看最简单的情况,仅仅遍历并输出全部元素,如下 : 

上面的二叉树应输出结果 [3,5,4,7,6,9],方法上面已经图示了,这里看一下怎么代码实现 ?

List<Integer> simpleTree(TreeNode treeNode){
    //空则返回
    if(treeNode == null){
        return new ArrayList<>();
    }

    //存放数字
    List<Ineteger> list = new ArrayList<>();

    //存放节点
    Queue<TreeNode> queue = new LinkedList<>();
    queue.add(treeNode);

    while(queue.size() > 0){
        TreeNode temp = queue.remove();
        list.add(temp.val);
        
        if(temp.left != null){
            queue.add(temp.left);
        }
        if(temp.left != null){
            queue.add(temp.right);
        }
    }

    return list;
}

根据树的结构可以看到,一个结点在一层访问之后,其子孩子都是在下层按照FIFO的顺序处理的,因此队列就是一个缓存的作用。

这期就到这里 , 下一关见!

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

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

相关文章

Oracle-Ogg经典模式升级为集成模式步骤

​前言: Oracle Ogg集成模式比起经典模式功能更加的强大&#xff0c;支持更多的数据类型&#xff0c;压缩表同步&#xff0c;XA事务&#xff0c;多线程模式&#xff0c;PDB模式同步&#xff0c;RAC环境下抽取配置简单等新功能&#xff0c;所以可以选择将经典模式升级转化为集成…

The service already exists! 安装mysql数据库错误!

当你输入mysql install命令时报The service already exists! 报错的原因是服务已经存在&#xff01; 说明你之前可能已经装过了。 解决方法&#xff1a; 输入sc delete mysql 提示DeleteService 成功,则表示删除成功&#xff0c;你就可以重新输入mysqld install了。 最后显…

IntelliJ IDEA 2022创建Maven项目

IntelliJ IDEA 2022创建Maven项目 点击New Project 配置一下下 (1). 选择Maven Archetype (2). 输入Name就是你的项目名称 (3). 输入Location是你的项目保存目录 (4). 选择JDK (5). 选择Catalog一般默认选择Internal即可 在Archetype这里我们选择一个模板来创建Maven项目 …

Mybatis学习(黑马程序员)

Mybatis操作数据库的步骤&#xff1a; 准备工作(创建springboot工程、数据库表user、实体类User)引入Mybatis的相关依赖&#xff0c;配置Mybatis(数据库连接信息)编写SQL语句(注解/XML 1.创建springboot工程&#xff0c;并导入 mybatis的起步依赖、mysql的驱动包 2.在springb…

C++ 信息学奥赛 2046:【例5.15】替换字母

#include<cstdio> #include<iostream> using namespace std; int main() { char st[200];char A,B; int n0;while((st[n]getchar())!\n); //将原文存放在字符数组st中,并且要注意上述的最后分号 Agetchar();getchar();Bgetchar(); //读取A和B&#xff0c;中间get…

10 行代码即可检测脸部情绪

引言 面部表情展示人类内心的情感。它们帮助我们识别一个人是愤怒、悲伤、快乐还是正常。医学研究人员也使用面部情绪来检测和了解一个人的心理健康。 人工智能在识别一个人的情绪方面可以发挥很大的作用。在卷积神经网络的帮助下&#xff0c;我们可以根据一个人的图像或实时视…

mipi DPHY学习记录

DPHY的内容很多,而且细节很多,我会一点一点的进行补充记录,今天要记录的是cdphy的LP-MODE数据传输的过程。 1:HS 和LP mode lane status 和 lane上的电压 HS mode时,差分线上的电压摆幅为200mv,LP mode时,差分线上的电压为1.2v 2:HS mode data Transmission start 在…

SHAP(一):使用 XGBoost 预测英雄联盟获胜

SHAP&#xff08;一&#xff09;&#xff1a;使用 XGBoost 预测英雄联盟获胜 本笔记本使用 Kaggle 数据集 英雄联盟排名比赛&#xff0c;其中包含从 2014 年开始的 180,000 场英雄联盟排名比赛。 根据这些数据&#xff0c;我们构建了一个 XGBoost 模型&#xff0c;根据有关该球…

48基于matlab的经验傅里叶分解,适用于非线性及非平稳时间序列分析,将信号进行精确分解。程序已调通,可直接运行。

基于matlab的经验傅里叶分解&#xff0c;适用于非线性及非平稳时间序列分析&#xff0c;将信号进行精确分解。程序已调通&#xff0c;可直接运行。

3D高斯泼溅(Splatting)简明教程

在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D场景编辑器 3D 高斯泼溅&#xff08;Splatting&#xff09;是用于实时辐射场渲染的 3D 高斯分布描述的一种光栅化技术&#xff0c;它允许实时渲染从小图像样…

优先级队列:PriorityQueue常用接口+构造+方法+源码分析+OJ练习

文章目录 PriorityQueue常用接口一.PriorityQueue 的特性二.PriorityQueue常用接口介绍1.优先级队列的构造2.插入/删除/获取优先级最高的元素3.PriorityQueue的扩容方式&#xff1a; PriorityQueue常用接口 一.PriorityQueue 的特性 1.Java集合框架中提供了 **PriorityQueue *…

ActiveMq学习⑦__ActiveMq协议

问题一、默认的61616端口如何更改&#xff1f; 问题二、你生产上的链接协议如何配置的&#xff1f;使用tcp吗&#xff1f; ActiveMQ 支持的client-broker 通讯协议有&#xff1a;TVP、NIO、UDP、SSL、Http(s)、VM。 其中配置TransportConnector 的文件在ActiveMQ 安装目录的co…

产品经理墨刀学习----注册页面

我们做的产品是一个校园论坛学习开发系统&#xff0c;目前才开始学习。 &#xff08;一&#xff09;流程图 &#xff08;二&#xff09;简单墨刀设计--注册页面 &#xff08;1&#xff09;有账号 &#xff08;a&#xff09;直接登录&#xff1a; &#xff08;b&#xff09;忘…

Git使用规范指南

文章目录 Git使用规范指南前言分支命名规范分支合并流程规范提交信息规范Angular提交规范注意事项 通用Git忽略文件配置 Git使用规范指南 前言 由于最近写完代码之后&#xff0c;Git使用不规范被领导说了&#xff0c;所以最近通过阅读大量的相关博客快速学习Git使用规范&#…

apachesolr启动带调试

这里solr.cmd报错&#xff0c;报错原因是java版本问题&#xff0c;后面发现这是因为多个java版本导致读取java_home失败&#xff0c; 那么我们修改solr.cmd中的JAVA_HOME为SOLR_JAVA_HOME IF DEFINED SOLR_JAVA_HOME set "JAVA_HOME%SOLR_JAVA_HOME%"环境变量将SOLR…

Qt全局定义

一、QtGlobal头文件 头文件中包含了Qt类库的一些全局定义&#xff0c;包括&#xff1a; 基本数据类型全局函数宏定义 二、基本数据类型 三、全局函数 四、宏定义 1.Qt版本相关的宏 1.1 QT_VERSION 这个宏展开为数值形式 0xMMNNPP (MM major, NN minor, PP patch) 表示…

P9831 [ICPC2020 Shanghai R] Gitignore

P9831 [ICPC2020 Shanghai R] Gitignore - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 只看题意翻译这道题是做不出来的&#xff0c;还要去看英文里面的规定&#xff08;这里就不放英文了&#xff09;&#xff0c;主要问题是不要公用子文件夹。 例如: 1 / a / 2 2 / a / 3…

【C语言】函数的系统化精讲(一)

&#x1f308;write in front :&#x1f50d;个人主页 &#xff1a; 啊森要自信的主页 &#x1f308;作者寄语 &#x1f308;&#xff1a; 小菜鸟的力量不在于它的体型&#xff0c;而在于它内心的勇气和无限的潜能&#xff0c;只要你有决心&#xff0c;就没有什么事情是不可能的…

线程条件控制实现线程的同步

前面讲了互斥锁&#xff0c;但是总感觉有些功能互斥锁有些不够用。 条件变量是线程另一可用的同步机制。条件变量给多个线程提供了一个会合的场所。条件变量与互斥量一起使用时&#xff0c;允许线程以无竞争的方式等待特定的条件发生。 条件本身是由互斥量保护的。线程在改变条…

Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对这几篇博客也感兴趣o (ˉ▽ˉ&#xff1b;) &#x1f4dc;什么是SpringMVC&#xff1f;简单好理解&#xff01;什么是应用分层&#xff1f;SpringMVC与应用分层的关系&#xff1f; 什么是三层架构&…