二叉搜索树的广度优先遍历

39 篇文章 68 订阅
订阅专栏

在上一节中,我们学习了二叉树的而前序遍历,中序遍历,以及后续遍历。但是我们发现,上述三种遍历方式都使用到了递归,因此无论哪种遍历都是一直往深处遍历到不能遍历为止。那么,有没有什么方法能够将每一层的节点遍历完然后在遍历下一层的节点呢?能够解决这种问题呢,因此,接下来我们就要开始讨论二叉树的广度优先遍历。

对于广度遍历,我们需要额外引进一个辅助工具,那就是我们熟悉的数据结构中的一种:队列。

让我们先看一下具体是怎么操作的吧。


首先,我们new一个队列出来,队列的特点想必大家都已经了解了:先进先出。所以,我们可以先把整棵树的根节点第一个加入队列。然后通过队列的front方法把队列的首元素的地址返回出来(此处的根节点地址)并赋值给一个专门记录需要被遍历的节点的地址node,然后在去访问该节点(node)的元素。当node指向的节点被访问后,我们在去看一下node节点有没有孩子节点啊?如果有的话,就把他的左右孩子节点都给加入队列,这样位于此处(此时队列的首元素)就能安心的离开这个队列了。如果每一个节点排到队列的队首被访问后,都把自己的孩子节点全部加入队列后,在安心的离开队列的话,这样遍历的顺序就是按照层序遍历来的。



上图中,我们发现出队的顺序都是按照层序遍历出队的。28节点带了他的两个子节点16和30入队,16带了他的两个子节点13,22入队,30带了他的两个子节点29,42.......。依此循环,可以保证二叉树是一层一层被遍历的。

以下是相应程序遍历的部分代码:


void leverorder(){
        queue<node*> duilie;
        if(root!=NULL){//必须存在二叉树才能够进行层序遍历
            duilie.push(root);
            while (!duilie.empty()){
                    node*node=duilie.front();
                    cout<<node->key<<' ';
                    if(node->left!=NULL){
                        duilie.push(node->left);
                    }
                    if(node->right!=NULL){
                        duilie.push(node->right);
                    }
                    duilie.pop();


            }
        }
    }


让我们来看一下结果:

a.insert(3,4);
    a.insert(2,4);
    a.insert(9,4);
    a.insert(1,4);
    a.insert(5,4);
    a.inorder();
    cout<<endl;
    a.leverorder();

输出结果如下图所示:

1 2 3 5 9
3 2 9 1 5

如果您想访问完整的二叉树源代码,请点击此处




广度优先遍历
计算机辅助工程
11-12 788
通过广度优先算法遍历树 初始条件:树根节点id 目标:遍历树中的所有节点 算法:深度优先,递归 因为初始条件是一个点,每次小循环找到的是一个列表,所以为了实现递归,应先将初始条件初始化为一个只有根节点的列表,之后一层一层向下找,每找完一层,就更新一次列表,直至列表为空,递归结束。 算法如下: list_loop = [根节点] while len(list_loop) !=0: new_list_loop = [] for item in list_loop: print (‘打
java 树 广度优先遍历_Java二进制搜索树遍历操作的详细描述[前,中,后,层次,广度优先遍历]...
weixin_32795109的博客
02-16 277
本文介绍了Java二进制搜索树遍历操作. 与您分享以供参考,如下:前言: 在Java Binary Search Tree Basics的上一节中,我们了解了该树及其相关知识,并对Binary Search Tree进行了基本实现. 下面我们继续改进我们的二进制搜索树.对于二叉树,有深度遍历宽度遍历. 深度遍历具有三种前序,中阶和后序遍历方法. 广度遍历就是我们通常所说的分层遍历,如图所示:由于...
二叉树的广度优先搜索
ONEMORE6499的博客
03-08 2389
二叉树的广度优先搜索无法匹配先中后序遍历任何一种方式,实际上就是按每一层结点进行搜索。我们可以借助于集合作为每一层的中间变量进行操作。 eg: 构建二叉树并进行广度优先搜索: public static boolean bfs(TreeNode root, int target){ ArrayList<TreeNode> roots = new ArrayL...
二叉树的遍历问题—广度优先实现(从代码理解算法)
最新发布
weixin_44397355的博客
08-09 1065
从代码解释广度优先搜索,论证正确性
广度优先搜索二叉树
hehainan_86的专栏
09-13 4074
深度优先搜索二叉树包括递归和非递归的,我的另个一博客里面写的有。 这里阐述一下广度优先搜索遍历: 其主要思想是采用队列的形式, 首先根节点入队,循环判断当前队列非空,访问队列头节点,然后出队列, 如果左子树非空,左子树根节点入队; 如果右子树非空,右子树根节点入队。   代码如下: //广度优先遍历二叉树 void Bitree_traverse(Queue *pq, tree p
广度优先搜索遍历二叉树
一觉睡过头的菜鸡的博客
05-24 527
1.前言 当我们在需要遍历一颗二叉树时,我们可以使用广度优先搜索算法(BFS)进行实现,广度优先算法会一层一层的遍历二叉树,从根节点向下一层一层的访问,直到没有节点为止。 2. Queue 在Java中,我们一般使用队列(Queue)进行广度优先搜索的实现。 Queue中的主要方法: add()或offer()加入数据 poll()从队列中删除第一个元素 peek()用于在队列的头部查询元素,只得到但不会删除这个元素, isEmpty()判断当前队列是非为空。 3. 实现思路 创建队列后先将根结点入队,
Java二叉搜索树遍历操作详解【前序、中序、后序、层次、广度优先遍历
08-19
"Java二叉搜索树遍历操作详解【前序、中序、后序、层次、广度优先遍历】" Java二叉搜索树是一种常用的数据结构,遍历操作是其核心内容。Java二叉搜索树遍历操作可以分为五种:前序遍历、中序遍历、后序遍历、层次...
二叉搜索树遍历(前序、中序、后序、层次、广度优先遍历
thatkrisyang
03-12 484
https://www.cnblogs.com/wfaceboss/p/10678988.html 前言:在上一节中,我们对树及其相关知识做了了解,对二叉搜索树做了基本的实现,下面我们继续完善我们的二叉搜索树。 对于二叉树,有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即我们寻常所说的层次遍历,如图: 因为树的定义本身就是递归定义,所以对于前序、中序以及后序这三种遍历...
数据结构学习。C语言实现算法:图的深度优先遍历广度优先遍历二叉查找树、 二叉树 、堆排序算法、 KMP算法、 链表.zip
06-14
深度优先遍历是一种用于遍历或搜索树或图的算法。它从根节点开始,尽可能深地搜索树的分支。当节点v的所在边都已被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有...
二分搜索树-先序遍历
weixin_45010894的博客
09-09 219
package tree; //具有可比性的泛型 public class BST<E extends Comparable> { private class Node { public E e; private Node left; private Node right; public Node(E e) { this.e = e; left = null;
二叉树的广度优先遍历策略详解
weixin_71405027的博客
12-11 656
③若队列非空, 则队头节点出队, 访问该节点, 并将其左、右孩子树插入队尾(如果有的话)2)Step2: 定义一个二叉树类, 并定义广度优先遍历的方法.3)Step3: 在main函数中, 完成测试.1) Step1: 先定义一个节点类。①初始化一个辅助队列(先进先出)
二叉树构造:二叉树的广度优先遍历
张元胤的博客
12-22 1060
输入一棵二叉树的先序遍历序列和中序遍历序列,输出它的广度优先遍历序列。
二叉搜索树的深度&广度优先遍历 C++实现
士杰的博客
03-12 1275
实际上树和图的广度&深度优先遍历方法十分类似,所以今天针对树的遍历方法实现进行详细分析,并且树的遍历在笔试中也是非常常见的一种方法,并且《剑指Offer》中的许多面试题用到了这两种遍历方法进行不同需求的算法实现。 深度优先遍历 深度优先遍历:借助递归算法不断遍历当前遍历到节点的左右子节点,对于树这个数据结构根据左子节点、右子节点和当前节点的遍历顺序该搜索算法又可分为前序、中序和后序遍历,其...
二叉树深度优先遍历广度优先遍历
yangshuangtao的专栏
09-16 790
深度优先遍历,将一颗二叉树优先往更深层次遍历,先遍历根,然后分别是左子树和右子树,借助栈的数据结构来实现。先将右子树压栈,在将左子树压栈。 void depthFirstSearch(Tree root){     stackNode *> nodeStack;  //使用C++的STL标准模板库     nodeStack.push(root);     Node *node;  
二叉排序树的构造、深度优先遍历广度优先遍历
u012379844的专栏
09-15 823
之前面试官总是会问到二叉树的遍历,自己回答的很不好。甚至可以说想都想不起来。真的应了老师应常说的那句话,你们学的东西都还给老师了啊。。。这两天在看mysql优化的时候看到了B树,然后去查阅B树的知识,又知道B树又跟二叉排序树脱不了关系。于是就整理了这篇关于二叉排序树的相关知识。         首先我们知道,二叉排序树的特征有:(1)如果一个节点的左子树不空,那么左子树的所有节点的值均小于该节点
Jzoj3901 二叉查找树
dianning8393的博客
10-03 131
题意:给你一个bst插入的顺序问你完成这些操作需要多少次比较(即这颗bst所有节点深度之和) 显然,我们在bst中插入一个节点x,它一定是它前继或者后续的儿子 这样的话,我们记录每个点的深度,每次找前继和后续即可 本来应该用链表的,我还是为了卡时用了ZKW线段树 #pragma GCC opitmize("O3") #pragma G++ opitm...
二叉搜索树de遍历
yl_mouse的博客
05-19 126
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。思路:首先看见这道题,中序遍历可以很好地解决这个问题,但是中序遍历中递归我不会,想不明白。看了好多大神的解决方案,最后自己写出来了。...
Java实现二叉树深度优先广度优先遍历算法详解
广度优先遍历(BFS)则按照层次顺序访问树的节点,从根开始,逐层向叶子节点推进。非递归实现通常使用队列来存储待访问的节点,遵循先进先出(FIFO)的原则。 在给定的示例中,针对以下二叉排序树: ``` 35 / \ ...
写文章

热门文章

  • JavaWeb——Servlet(全网最详细教程包括Servlet源码分析) 444806
  • JAVA基础——接口(全网最详细教程) 383792
  • 快速幂算法(全网最详细地带你从零开始一步一步优化) 193437
  • 动态规划之——矩阵连乘(全网最详细博文,看这一篇就够了!) 73459
  • 汉明码——计算机网络——全网最通俗的讲解 61500

分类专栏

  • 笔试笔记 13篇
  • 数据结构与算法 39篇
  • JAVA 9篇
  • 数据库 1篇
  • Python
  • Linux
  • 操作系统 2篇
  • 程序设计 3篇
  • JAVAEE 2篇
  • office办公
  • 计算机网络 3篇
  • Spring 2篇
  • XML
  • 汇编语言 1篇
  • JavaScript 1篇
  • 设计模式 1篇
  • Android安卓开发
  • Android安卓 1篇

最新评论

  • 快速幂算法(全网最详细地带你从零开始一步一步优化)

    All The Way North-: 额。。按照你的意思,你就是想先算 d*a

  • 快速幂算法(全网最详细地带你从零开始一步一步优化)

    Q马-Qma: 但是普通代码那里好像也不是你表达的形式,我刚开始也认为是你的那种,但是执行了应该是a%d*a%d*a%d...,

  • 操作系统——银行家算法(银行家和房地产开发商的爱恨情仇)

    程艾影__: available

  • JavaWeb——Servlet(全网最详细教程包括Servlet源码分析)

    Forest': 说一下我的理解 客户端发送http请求给服务端,这个请求可以是获取网页、提交表单数据、下载文件等,服务端通过web服务器(Tomcat)将http请求解析为request(HttpServletRequest)对象给servlet,servlet处理request对象请求,并返回一个response对象(HttpServletResponse)(对象中包含了返回给客户端的数据,例如HTML页面、JSON数据等),web服务器将response对象解析为http响应,发送给客户端。 servlet就像一个做题大师,客户端需要服务端帮忙做题,web服务器就是一个翻译官,客户端传入问题,web服务器将这个问题翻译给servlet,servlet做完之后把答案给web服务器,之后web服务器再翻译给客户端

  • JAVA基础——接口(全网最详细教程)

    A_rosy: 确实不错,尤其是有了实际例子之后,理解更方便了,比站内那些照搬定义的文章好懂

大家在看

  • 基于SpringBoot的新能源汽车充电管理系统的设计与实现-毕业设计源码44945 1080
  • SQL——判断是否是5的倍数
  • 第五周:函数和代码复用 822
  • 【贪心算法】(第十二篇)
  • 免费SSL证书和付费证书的区别是什么?

最新文章

  • 从加解密到数字证书(通过职场有趣小故事深入浅出)
  • 什么是双亲委派机制?
  • Spring框架——Bean的Scope(作用域)易错陷阱解析
2023年2篇
2019年9篇
2018年16篇
2017年25篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家太原阳江玻璃钢卡通雕塑吉林玻璃钢卡通雕塑阿狸厂家河南泡沫玻璃钢雕塑定制广东公园小品玻璃钢雕塑工厂石家庄景观玻璃钢雕塑定制闵行区进口玻璃钢雕塑销售价格弥勒市玻璃钢雕塑厂家电话庆阳市玻璃钢雕塑玻璃钢雕塑广州厂家四川高质量玻璃钢雕塑批发德州锻铜玻璃钢彩绘雕塑厂家夏季商场美陈图片商场美陈都是用什么软件做忠县玻璃钢仿铜雕塑湖北锻铜校园玻璃钢雕塑浙江玻璃钢蔬菜景观雕塑定做常见玻璃钢花盆赤峰玻璃钢雕塑生产厂家广东大型商场美陈生产上海商场商业美陈报价滁州设计玻璃钢雕塑价格东莞市雕塑厂玻璃钢雕塑厂家上海开业商场美陈价格昆明市玻璃钢雕塑报价龙岩玻璃钢雕塑制作大型玻璃钢雕塑怎么制作静安区玻璃钢雕塑制作石家庄节日商场美陈汕头工艺玻璃钢卡通雕塑台州玻璃钢抽象人物雕塑厂家加工香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化