数据结构—二叉树广度优先遍历

(二十六)二叉树的广度优先遍历(按层遍历) 二叉树的广度优先遍历(按层遍历) (1)层序遍历,输出到一行 示例:【输出】1 2 3 4 5 6 7 void levelOrder(TreeNode* head){ queue<TreeNode*> que; if(head != NULL){ que.push(head); } while(!que.empty()){ TreeNode* cur = que.front(); cout << cu 阅读详情
AI摘要

本文深入讲解了二叉树的广度优先遍历算法,通过实例展示了遍历过程,并探讨了队列在算法中的关键作用。同时,文章对比了广度与深度遍历的不同,强调了数据结构选择的重要性。

如果说深度遍历是在一个方向上“一头扎到底”,那么广度遍历则恰恰相反,现在各个方向上走出第1步,再在各个方向上走出第2步,第3步…一直在各个方向上全部走完。学习二叉树层序遍历时,第一次发现数据结构还是挺有意思的,选用不同的数据结构,对完成数据操作的难易程度和效率都有很大影响,根据不同业务场景,选择合适的数据结构,至关重要。
在这里插入图片描述

1.二叉树的广度优先遍历

详细遍历步骤如下
1)根节点1进入队列;
2)节点1出队, 输出节点1, 并得到节点1的左子节点2、 右子节点3, 让节点2和节点3入队;
3)节点2出队,输出节点2,并得到节点2的左子节点4、 右子节点
5, 让节点4和节点5入队;
4)节点3出队, 输出节点3, 并得到节点3的右子节点6,让节点6入
队;
5)节点4出队, 输出节点4, 由于节点4没有孩子节点, 所以没有新节点入队;
6)节点5出队, 输出节点5, 由于节点5没有孩子节点, 所以没有新节点入队;
7)节点6出队, 输出节点6, 节点6没有子节点, 没有新节点入队。
至此遍历完毕。
在这里插入图片描述

3.配套代码

配套代码如下,TreeNode 类见上一篇博文https://blog.youkuaiyun.com/mcsdnuser/article/details/106752398

/**
     *二叉树广度遍历
     * @param root
     */
    public void levelOrderTraversal(TreeNode root){
        Queue<TreeNode> quene = new LinkedList<TreeNode>();
        quene.offer(root);
        while (!quene.isEmpty()){
            TreeNode node = quene.poll();
            System.out.println(node.data);
            if(node.left != null){
                quene.offer(node.left);
            }
            if(node.right != null){
                quene.offer(node.right);
            }
        }
    }

4.顺便说一下Queue

队列(Queue)是与栈相对的一种数据结构, 是集合(Collection)的一个子类。队列允许在一端进行插入操作,而在另一端进行删除操作的线性表,栈的特点是后进先出,而队列的特点是先进先出。队列的用处很大,比如实现消息队列。

4.1 Queue 继承结构

在这里插入图片描述
从上图可以看出 Queue 大体可分为以下三类。
双端队列:双端队列(Deque)是 Queue 的子类也是 Queue 的补充类,头部和尾部都支持元素插入和获取。
阻塞队列:阻塞队列指的是在元素操作时(添加或删除),如果没有成功,会阻塞等待执行。例如,当添加元素时,如果队列元素已满,队列会阻塞等待直到有空位时再插入。
非阻塞队列:非阻塞队列和阻塞队列相反,会直接返回操作的结果,而非阻塞等待。双端队列也属于非阻塞队列。

4.2 Queue 方法

Queue 方法如图:
在这里插入图片描述
其中比较常用的方法有以下几个:
add(E):添加元素到队列尾部,成功返回 true,队列超出时抛出异常;
offer(E):添加元素到队列尾部,成功返回 true,队列超出时返回 false;
remove(Object):删除元素,成功返回 true,失败返回 false;
peek():获取但不移除此队列的第一个元素,若队列为空,则返回 null;
poll():获取并移除此队列的第一个元素,若队列为空,则返回 null;
element():获取但不移除此队列的第一个元素,若队列为空,则抛异常。
更为详细我们会在后续展开。。。

二叉树的深度遍历和广度遍历 今天为大家带来的是二叉树的遍历。对于二叉树的基础问题可以参考这里: 二叉树(一)-基础知识 二叉树的遍历分为两种,一种是深度遍历,一种是广度遍历。通俗一点的说,深度遍历是递归调用的思想,尽可能深的探索子树,然后再尽可能深的探索另一棵子树。而广度遍历就是依次读取同一层的节点,直到最末端。 以下面的二叉树为例: 对于深度遍历,就是每次探索到最深的子树,下图为先序遍历的第一次探索: 对于广度遍历,先探... 阅读详情

相关推荐

QUIC 协议域名封堵:核心原理、关键技术与实现路径(C/C++代码实现)

随着 QUIC 协议在互联网领域的广泛应用,其基于 UDP 的传输特性与加密设计,打破了传统 TCP 协议下的域名封堵逻辑,给网络合规管理与安全防护带来新的技术难题。本文将脱离具体代码实现,聚焦 QUIC 协议域名封堵的核心原理、关键技术环节与实际落地路径,从协议特性本质出发,解析如何在遵循 RFC 9000、RFC 9001 等规范的前提下,实现对 QUIC 流量的精准域名封堵。

chen1415886044的博客 1466

【算法】二叉树广度优先(BFS)

二叉树广度优先(BFS)

个人学习笔记 1280

Unable to negotiate with XXXX port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

打开ssh_config此文件,滑动到最下面,新增自己git主机地址(这里我直接默认*)执行命令 git clone git@xxxxxxxxxxxxx.git。代码仓库已经添加了ssh公钥之后,克隆代码到本地时就报了这个问题。首先是找到git安装目录(根据自己安装时选项,找到这个目录)再进入ssh目录,找到 ssh_config 配置文件。配置完成后,保存配置文件后再次去clone代码。直接复制下面这一段到文件中最底部位置即可。然后进入 etc目录,找到ssh目录。终于可以克隆下来了。

萌兔兔MMQ!! 3357

二叉树的遍历问题—广度优先实现(从代码理解算法)

从代码解释广度优先搜索,论证正确性

weixin_44397355的博客 2573

AppStore逆向分析:从网络抓包到自动化模拟的完整实践

在移动应用生态中,理解客户端与服务器之间的通信协议是进行自动化测试、数据分析和系统集成的关键技术基础。通过分析网络请求与响应,可以深入理解认证、会话管理和数据交换的原理,这对于构建稳定的自动化流程至关重要。其技术价值在于能够实现合法场景下的流程模拟,例如应用元数据监控、沙盒环境测试或内部工具开发。在实际应用场景中,开发者常需处理登录态维持、请求签名验证及风控策略应对等挑战。本文聚焦于AppStore这一封闭生态,详细拆解了其登录、查询等核心环节的通信机制,并探讨了使用Python结合抓包工具进行安全逆向分析

weixin_42524171的博客 926

COMSOL求解器实战:如何避免非线性问题求解失败(附牛顿法调试技巧)

本文深入探讨了COMSOL求解器在处理非线性问题时常见的失败原因及解决方案。通过分析物理模型非线性特性、初始条件敏感性和求解器参数配置,提供了牛顿法调试的黄金四步法,包括模型检查、分阶段求解、参数调优和高级诊断工具应用。特别针对材料非线性、几何非线性和多物理场耦合等典型工程场景,给出了实战技巧和预防性建模策略,帮助工程师有效避免求解失败。

weixin_29284657的博客 419

二叉树的广度优先遍历

二叉树的广度优先遍历:从根节点开始,一层一层遍历二叉树,自左向右地打印每一个节点 思路: 先创建一个数组,用数组模拟队列。压入根节点,然后开始遍历: 从数组头弹出一个元素,然后看数组 let arr = []; function getRes(node){ if(node){ console.log( node.val ); arr.push(node); } while(arr.length > 0){ let.

拯救世界的光太郎 2352

在mdk文件移植太多_XCubeClassB代码 的移植

前言ST在www.st.com官网上提供了针对IEC60730/IEC60335 ClassB认证的软件包。软件包分为三个,分别适用STM8,STM32(基于标准外设库)和STM32(基于HAL库):STM8-SafeCLASSB,STM32-CLASSB-SPL,X-CUBE-CLASSB。本文以X-CUBE-CLASSB为例介绍如何做代码的移植以及经常遇到的问题的解决办法。X-CUB...

weixin_28898707的博客 1832

Python 数据结构之二叉树:二叉树的遍历:DFS 深度优先(先序遍历、中序遍历、后续遍历)和 BFS 广度优先遍历。

1. 二叉树: 二叉树是一种常用的数据结构,是树这种数据机构的一种特例。它最多只有两个子节点,且如果有两个子节点,两个子节点之间是有顺序的,一个称为左孩子节点,一个称为右孩子节点。 每个节点的构造如下: class TreeNode: def __init__(self, x): self.val = x self.left = None s...

CaoChengtai的博客 2420

apollo-减速带通行

主车在通过减速带时速度不超过3m/s

是菜鸟o的博客 390

如何用Python编程实现算术割圆术?

第10章 割圆术 Python编程要点 from … import …语句 math模块的sqrt()函数 round()函数 10.1 图解九章 {:–}觚( gū ):正多边形。“六觚”即正六边形,“十二觚”即正十二边形。 图10-1 六觚、十二觚、二十四觚 提示 图10-1所示由图解九章源码中的“图解割圆术.py”自动绘制而成,我们可运行脚本文件,查看动态的绘制过程。 割六觚以...

人邮异步社区 3237

数据结构和算法-17-二叉树的广度优先遍历和二叉树节点插入操作

这篇来用代码实现一颗二叉树,在实现二叉树之前,我们需要分析,如何给一棵树添加元素,添加的规则,其实先要查找和判断节点,查找和判断节点的过程,我们使用了广度优先遍历方法。 1.二叉树的广度优先遍历 先摆放一颗二叉树 思路1,我们先要构造一个个节点,节点我们前面使用过,Node, 这里也一样,只不过这个节点属性,除了一个元素,还有一个左子节点和右子节点这两个属性。例如构造A节点,元素存储是A...

Anthony_tester的博客 858

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【Super数据结构】二叉树的概念、操作大集合!(含深度/广度优先遍历/求深度/前序+中序构建二叉树/后序+中序构建二叉树等)

🏠关于此专栏:Super数据结构专栏将使用C/C++语言介绍顺序表、链表、栈、队列等数据结构,每篇博文会使用尽可能多的代码片段+图片的方式。🚪归属专栏:Super数据结构🎯每日努力一点点,技术累计看得见。

Jammingpro 1080

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VB.Net数据结构系列 第4章 树 4.3.2 二叉树的广度优先遍历

Code4-2 Node.vb Public Class Node Private pdata As Object Private pright As Node Public ReadOnly Property [data] As Object Get Return pdata End Get End Property Public Property left As Node Public P

学习微软 .net 技术开发 551

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数据结构与算法 | 树的广度优先遍历(完全二叉树)

# CY3761 | 2021-12-21 17:18 """ 02.树的广度优先遍历 完全二叉树的 add """ def getId(o): if o is None: return None return hex(id(o))[7:] # 节点类 class Node: def __init__(self, item): self.item = item # 节点值 self.lPoi = None #

CY3761的博客 608

【数据结构】二叉树的深度优先遍历DFS和广度优先遍历BFS(含C++递归和非递归方式实现)

讲解了关于二叉树的遍历,涉及深度优先遍历和宽度优先遍历,从递归和非递归两个思路来进行实现。

weixin_50941083的博客 1338

数据结构:二叉树的访问--广度优先遍历法

资料摘自 广度优先扫描(层次扫描)算法 初始化步骤:将根节点插入到队列中 递归步骤: 1.队列为空时过程终止 2.将头节点p从队列中并打印其数据值 3.用该节点去标识位于树的下一层的子节点 if(p->Left()!= NULL) Q.QInsert(p->Left()); if(p->Right()!= NULL) Q.QInsert(p->Right()); 以下步骤

afei198409的专栏 1326

用python来实现数据结构中的二叉树的广度优先遍历,以及深度优先遍历中的前序遍历、中序遍历,后序遍历。

二叉树的深度优先遍历:先序遍历,中序遍历,后序遍历。 广度优先遍历(层次遍历)。

蜉蝣的博客 337

【数据结构与算法Python】树与树算法_二叉树_广度优先遍历(层次遍历)_深度优先遍历(先中后序)

006数据结构与算法Python树与树算法树的概念树的术语树的种类树的存储与表示常见的一些树的应用场景二叉树二叉树的基本概念二叉树的性质(特性)二叉树的节点表示以及树的创建二叉树的遍历深度优先遍历(先中后序遍历)广度优先遍历(层次遍历) 树与树算法 树的概念 树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶

一梦 547

23.数据结构——二叉树添加节点和广度优先遍历的实现(笔记)

二叉树的节点表示以及树的创建        通过使用Node类中定义三个属性,分别为item本身的值,还有lchild左孩子和rchild右孩子 class Node(object): """节点类""" def __init__(self,item): self.item = item self.lchild = None self.rchild = None 树的创建,

枫城雪-----学习空间 287

数据结构与算法(Python)Day8(树、二叉树(广度优先遍历、深度优先遍历))

文章目录树树的概念树的相关术语树的种类二叉树的性质层次遍历(广度优先遍历)深度优先遍历二叉树由遍历确定一棵树 树 树的概念 树(英语tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限个节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 每个节点有零个或多个子节点 没有父节点的节点称为根节点 每一个非根节点有且只有一个父节点 除了根节点外,每个

qq_42881059的博客 515

【数据结构】【二叉树】五、图的深度优先遍历(DFS) && 广度优先遍历(BFS)

目录一、深度优先遍历(DFS)二、广度优先遍历(BFS) 一、深度优先遍历(DFS) 二、广度优先遍历(BFS)

怕走崎岖路,莫想登高峰 496

数据结构-二叉树的深度优先和广度优先遍历

1.基本概念DFS深度优先遍历:沿着树的深度遍历树的节点,先访问根结点,然后是左子树,右子树 BFS广度优先遍历:横向遍历,沿着树的宽度,先访问根结点,然后左右子节点。然后是上述左右子节点的子节点,一层一层往下。 以下图为例: DFS的结果为【ABDECFG】 BFS的结果为【ABCDEFG】2.递归实现void DFS(TreeNode* root, vector<int>& ans)

沐沐余风的专栏 1262

【数据结构】二叉树的·深度优先遍历(前中后序遍历)and·广度优先(层序遍历)

二叉树的·深度优先遍历(前中后序遍历)and·广度优先(层序遍历)

luhaoran814的博客 3535

数据结构与算法14、剑指Offer8-从上往下打印二叉树(广度优先遍历)

数据结构与算法14、剑指Offer8-从上往下打印二叉树(广度优先遍历)

Xu_Wave 323
上一篇: 数据结构—二叉树深度优先遍历
mcsdnuser
博客等级 码龄7年 2粉丝 7原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值