二叉树层序遍历

12 篇文章 1 订阅
订阅专栏
文章详细介绍了二叉树的层序遍历概念及其实现,通过队列数据结构从根节点开始,逐层访问节点。同时,文章提供了一种利用层序遍历判断完全二叉树的方法,即在遍历过程中检查是否有孤立的孩子节点。通过代码示例展示了如何进行层序遍历和判断完全二叉树。
摘要由CSDN通过智能技术生成

目录

一、什么是层序遍历

二、层序遍历的实现

三、判断一棵树是否为完全二叉树

总结:


学习二叉树结构,最简单的就是遍历。

所谓二叉树遍历就是按照某种规则对二叉树中的节点进行相应操作,每个节点值操作一次。

遍历是二叉树的重要运算之一,也是二叉树进行其它运算的基础。

二叉树遍历有:前序遍历、中序遍历、后序遍历、层序遍历。本文即讨论层序遍历,掌握程序遍历的思路,写法以及简单应用。

一、什么是层序遍历

设根所在的节点层数为1,层序遍历就是从二叉树的根节点出发,首先访问第一层的根节点,然后从左到右访问第2层节点,接着第三层,直到访问全部节点。这一自上而下,自左向右的访问方式就叫层序遍历。

图解:

这颗二叉树的层序遍历为:
A->B->C->D->E->F->G->H->I

二、层序遍历的实现

方法:
根节点出队列,带左右孩子入队列

图解:

 层序遍历,需要借助队列数据结构,先把根节点入队列,依次出队列,每次出一个数据,就带节点的孩子入队列(先入左孩子,后入右节点),直到全部节点出过队列,队列为空,循坏结束。

层序遍历完成。

代码实现:

void BinaryTreeLevelOrder(BTNode* root)
{
	Queue qu;
	BTNode * cur;

	QueueInit(&qu);

	QueuePush(&qu, root);  //入根节点

	while (!QueueIsEmpty(&qu))  //队列不为空,重复出队列,入队列
	{
		cur = QueueTop(&qu);

		putchar(cur->_data);

		if (cur->_left)    //入孩子
		{
			QueuePush(&qu, cur->_left);
		}

		if (cur->_right)
		{
			QueuePush(&qu, cur->_right);
		}

		QueuePop(&qu);   //头删,出队列
	}

	QueueDestory(&qu);
}

三、判断一棵树是否为完全二叉树

1.完全二叉树

完全二叉树:

第K层从左到右,无空缺节点。 

满二叉树是完全二叉树的一种特殊情况

 

2.判断?

判断是否为完全二叉树,利用完全二叉树的定义,中途没有孤立的孩子节点。

思路:

利用层序遍历的思路

入队列---->出队列......带孩子入队列----> 1.遇到为空的孩子 2.队列为空  ---->停下 

队列不为空——非完全二叉树

队列为空——是完全二叉树

图解:

 

代码实现:

bool BinaryTreeComplete(BTNode* root)
{
	Queue q;
	QueueInit(&q);

	if (root)
		QueuePush(&q, root);

	while (!QueueEmpty(&q))
	{
		BTNode* front = QueueFront(&q);

		if (front == NULL)  //遇到空节点 1.结束 2.不是完全二叉树
			break;
		QueuePop(&q);

		QueuePush(&q, front->left);
		QueuePush(&q, front->right);
	}

	while (!QueueEmpty(&q))  //结束则为完全二叉树,否则不是
	{
		if (QueueFront(&q))
		{
			return false;
		}
		QueuePop(&q);
	}
	return true;

}

总结:

本文介绍二叉树的层序遍历,层序遍历是一种较为特别的遍历方式,有它独特的用处。

另外介绍了完全二叉树的判断方法。即出队列,入队列的层序遍历,再加上简单的判断

作者知识有限,希望能给大家带来一点帮助。

二叉树遍历——层序遍历
m0_67198282的博客
03-24 1万+
目录 1.什么是层序遍历? 2.实现思路 3.代码实现 1.什么是层序遍历? 就是将一颗树按照每一层每一层的方式进行遍历 例如这棵树,进行层序遍历的结果应该是 那么我们该怎样去实现呢? 2.实现思路 利用队列先进先出的思想去实现 重要思想:一层带一层 我们先把书的根节点入进去,然后每出一次都把它的子节点入队,出子节点时也一样 3.代码实现 因为我们用的是c来实现,所以在实现前请准备好一个队列 队列头文件 #pragma once #incl.
数据结构与算法学习day18-层序遍历
最新发布
weixin_48990728的博客
08-28 468
层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。需要借用一个辅助数据结构即队列来实现,
数据结构二叉树的层序遍历(BFS)
Colorful___的博客
10-06 9437
层序遍历是一种广度优先搜索的遍历方式,适用于树结构。通过利用队列实现层序遍历,我们可以按照从上到下、从左到右的顺序逐层遍历树中的节点。层序遍历广泛应用于树的分析、最短路径寻找、二叉树的构建等场景。掌握层序遍历的原理和实现方法将对解决相关问题非常有帮助。
二叉树的层序遍历
weixin_53310322的博客
02-16 1万+
二叉树的层序遍历1.层序遍历2.实例2.1二叉树的层序遍历2.2 二叉树的层序遍历 II2.3 二叉树的右视图2.4 二叉树的层平均值 1.层序遍历 层序遍历一个二叉树。就是从左到右一层一层的区遍历二叉树。为了实现层序遍历,我们需要借助一个辅助数据结构即队列来实现,队列先进先出,符合一层一层遍历的逻辑,而栈先进后出适合模拟深度优先遍历也就是递归的逻辑。 2.实例 2.1二叉树的层序遍历 二叉树的层序遍历 思路: 1.创建队列用来存储节点,创建list集合用来存储结果 2.逐层记录结果即可。 /**
LeetCode 102 ——二叉树层次遍历
weixin_34124939的博客
11-17 376
1. 题目 2. 解答 定义一个存放树中数据的向量 data,一个存放树的每一层数据的向量 level_data 和一个存放每一层节点的队列 node_queue。 如果根节点非空,根节点进队,然后循环以下过程直至队列为空: 得到队列的大小,即为树中当前层的节点个数。队列元素循环出队,并将节点的值加入 level_data,如果节点有左右子节点,左右子节点入队 将 level_da...
二叉树层次遍历
qq_36915686的博客
02-08 286
Problem Description 已知一颗二叉树的前序遍历和中序遍历,求二叉树层次遍历。 Input 输入数据有多组,输入T,代表有T组测试数据。每组数据有两个长度小于50的字符串,第一个字符串为前序遍历,第二个为中序遍历。 Output 每组输出这颗二叉树层次遍历。 Example Input 2 abc bac abdec dbeac Example
二叉树层序遍历.zip
02-07
二叉树层序遍历是一种常见的树形数据结构操作,主要应用于解决各种问题,例如查找树的宽度、构建树的镜像或者找到树的最大深度等。在这个“二叉树层序遍历.zip”资源中,我们可以期待深入学习二叉树的层序遍历算法...
二叉树层序遍历-实现代码-队列
12-02
/* 设栈元素为二叉树的指针类型 */ typedef struct { QElemType *base; int front; /* 头指针,若队列不空,指向队列头元素 */ int rear; /* 尾指针,若队列不空,指向队列尾元素的下一个位置 */ } SqQueue; ...
基于Java的二叉树层序遍历打印实现.docx
06-27
本篇主要讨论基于Java的二叉树层序遍历的实现,分为三种情况: 1. **基本层序遍历(剑指offer32-Ⅰ)**: 这种遍历方法将二叉树的节点值按层顺序存储到一个一维整数数组`int[] res`中。核心思想是利用队列(这里...
Python二叉树的遍历操作示例【前序遍历,中序遍历,后序遍历,层序遍历】
09-19
本文将深入探讨Python中的二叉树及其遍历方法,包括前序遍历、中序遍历、后序遍历以及层序遍历。通过具体的代码示例,我们将更好地理解这些遍历方法的工作原理和应用场景。 #### 二、二叉树基础知识回顾 二叉树是由...
用队列实现二叉树层序遍历
李洙赫的博客
06-05 1148
超简单二叉树的层序遍历
二叉树层次遍历
热门推荐
qq_44111805的博客
02-03 2万+
一、层次遍历 层次遍历即为从上到下,从左到右依次访问二叉树的每个结点。 二、层次遍历实现 1、实现思路 (1)我们定义一个队列,先将根结点入队; (2)当前结点是队头结点,将其出队并访问; (3)若当前结点的左结点不为空将左结点入队;若当前结点的右结点不为空将其入队即可。 2、实现代码 public class LevelOrder { static List<Integer> levellist=new ArrayList<>(); public static void l
二叉树的层序遍历(BFS)
weixin_45802793的博客
03-29 6186
文章目录二叉树的层序遍历(bfs)思想:BFS:102.二叉树层序遍历题目思路103.二叉树的锯齿形层序遍历题目199.二叉树的右视图题目:代码 二叉树的层序遍历(bfs) 思想: 二叉树的层序遍历主要是运用bfs的思想,进行一层一层的遍历 BFS: 创建队列Queue,然后从当前一层的节点进行取值操作,然后遍历下一层的节点,如此反复进行 102.二叉树层序遍历 题目 思路 class Solution { public List<List<Integer>> levelOrde
二叉树---层次遍历
Anora的博客
08-28 575
二叉树层次遍历T637.二叉树的层平均值给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。T102. 二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。T107.二叉树层次遍历 II给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) T637.二叉树的层平均值 给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。 输入: 3 / \ 9 20 /
Python二叉树层序遍历
05-14
Python中实现二叉树层序遍历可以使用队列来实现。具体过程如下: 1. 首先,将根节点入队。 2. 在每个循环中,取出队列的头部元素,并将其值存入结果列表中。 3. 如果该节点存在左子树,将其左子树入队。 4. 如果该节点存在右子树,将其右子树入队。 5. 重复步骤2-4,直到队列为空。 下面是Python实现二叉树层序遍历的代码: ``` class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def levelOrder(root: TreeNode) -> List[List[int]]: if not root: return [] res = [] queue = [root] while queue: level = [] n = len(queue) for i in range(n): node = queue.pop(0) level.append(node.val) if node.left: queue.append(node.left) if node.right: queue.append(node.right) res.append(level) return res ```
86
原创
1993
点赞
1561
收藏
1364
粉丝
关注
私信
写文章

热门文章

  • 二叉树层序遍历 5044
  • 【数据结构】图——最短路径 3021
  • 【数据结构】图的存储与遍历 2941
  • 【Linux】system V 共享内存 1801
  • Linux文件描述符|重定向 1767

分类专栏

  • linux 21篇
  • 计算机网络 9篇
  • C++项目 4篇
  • 日志系统 4篇
  • C++ 9篇
  • 数据结构 12篇
  • C++学习记录 5篇
  • MySQL 4篇
  • Python 2篇
  • C语言知识 11篇
  • LeetCode 1篇
  • 剑指offer 1篇

最新评论

  • MySQL事务管理

    深度搜索: 感谢纠正!这里是不够严谨。

  • MySQL事务管理

    shallwe?: 是的,MySQL针对快照读和当前读分别使用了MVCC机制和临键锁机制在一定程度上避免了可重复读隔离级别下的幻读现象,但是没有完全避免。如果在一个事务中,前后不是统一使用快照读或者当前读中某个,而是混着用的话,还是会出现幻读现象。所以我认为表里标了“×”的话不够严谨。

  • MySQL事务管理

    深度搜索: 关于幻读(Phantom Reads),它指的是当一个事务重新读取某个范围的记录时,另一个事务插入了符合该查询条件的新记录,导致第一次和第二次读取的结果不一致。 在MySQL的REPEATABLE READ隔离级别下,由于使用了MVCC和Next-Key Locks(索引记录上的锁和索引记录之间的间隙上的锁),MySQL避免了传统的幻读现象,即通过在索引上锁定记录的范围来防止其他事务插入新的记录到已锁定的范围内。需要注意的是,如果查询没有使用索引(或索引选择不佳),那么MySQL的REPEATABLE READ隔离级别可能无法完全防止幻读,因为此时MySQL可能无法有效地锁定足够的范围来阻止新记录的插入。所以我们可以认为针对mysql,不会产生幻读表情包

  • MySQL事务管理

    shallwe?: 最后的总结里,“可重复读”隔离级别中,“幻读”现象是不是标错了,表里打了个“×”

  • 【项目】多设计模式下的同步&&异步日志系统(二)

    CSDN-Ada助手: 恭喜你这篇博客进入【CSDN每天值得看】榜单,全部的排名请看 https://bbs.csdn.net/topics/619258339。

最新文章

  • Linux进程等待 | 程序替换
  • Linux进程概念(下)
  • Linux进程概念
2024
09月 4篇
08月 12篇
07月 5篇
05月 3篇
04月 1篇
03月 5篇
02月 9篇
01月 12篇
2023年32篇
2022年3篇

目录

目录

评论 37
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度搜索

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 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 网站制作 网站优化