【数据结构】二叉树的层序遍历~动画超详解

1 什么是层序遍历

  • 我们从字面意思就明白,所谓层序,就是一层一层按顺序去遍历一个二叉树,这和我们之前了解的按前中后序遍历方式完全不同

比方说这颗二叉树:
在这里插入图片描述

前序遍历:

请添加图片描述

层序遍历:
请添加图片描述

2 二叉树层序遍历的基本思路

  • 我们引入一个队列,入这棵树的根进队列,只要这个树的非叶子节点出队列了,立马让这个节点的子节点如队列,如此循环,我们直接看动画

请添加图片描述

3 二叉树层序遍历的实现

//层序遍历
void TreeLevelOrder(BTNode* proot)
{
	QU qu;   // 创建队列
	QInit(&qu);   // 队列初始化

	if (proot == NULL)  // 判空
	{
		return;
	}
	else
	{
		QPush(&qu, proot);  // 二叉树不是空就先把第一个值入队
	}

	while (!QEmpty(&qu))  //  只要队列不是空就一直循环,直到队列为空
	{
		QDataType tmp = QFront(&qu);  //  取队头
		QPop(&qu);   //  队头元素出队
		if (tmp->leftnode != NULL)  //  取队头的子节点入队(除非子节点为空)
		{
			QPush(&qu, tmp->leftnode);
		}
		if (tmp->rightnode != NULL)
		{
			QPush(&qu, tmp->rightnode);
		}
		printf("%d ", tmp->val);  //  打印出队的节点的值(视情况加或不加)
	}

	QDestroy(&qu);  //  别忘了销毁堆列
}

佬!都看到这了,如果觉得有帮助的话一定要点赞啊佬 >v< !!!
放个卡密在这,感谢各位能看到这儿啦!
请添加图片描述

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值