【数据结构】二叉树——判断是否为完全二叉树

一、思路

有完全二叉树的解释

我们想要判断二叉树是否为完全二叉树

我们可以用队列来实现

我们先将根节点入队列

再将根节点出队列,判断取出节点是否为空、

若不为空将该节点的左右节点入队列

左右节点为空也入队列

若为空则停止入队列

然后判断队列中是否有 NULL

若有则说明不是完全二叉树

若没有则说明是完全二叉树

二、代码实现

队列的代码

c 复制代码
//判断是否为完全二叉树
bool BTComplete(BTNode* php)
{
	//创建队列
	Queue p;
	QueueInit(&p);
	//将根节点入栈
	QueuePush(&p, php);
	while (!QueueEmpty(&p))
	{
		//取出队首节点并删除
		QueueDateType cp = QueueFront(&p);
		QueuePop(&p);

		//判断取出节点是否为空
		if (cp == NULL)
		{
			break;
		}
		//将左右节点入队列
		QueuePush(&p, cp->left);
		QueuePush(&p, cp->right);
	}
	//判断队列中是否有其他元素
	while (!QueueEmpty(&p))
	{
		//取出队首节点并删除
		QueueDateType cp = QueueFront(&p);
		QueuePop(&p);
		//判断节点中是否有数据
		if (cp != NULL)
		{
			QueueDesTroy(&p);
			return false;
		}
	}
	//队列销毁
	QueueDesTroy(&p);
	return true;
}
相关推荐
sci_ei1234 小时前
高水平EI会议-第四届机器学习、云计算与智能挖掘国际会议
数据结构·人工智能·算法·机器学习·数据挖掘·机器人·云计算
qystca5 小时前
异或和之和
数据结构·c++·算法·蓝桥杯
周杰伦_Jay6 小时前
Ollama能本地部署Llama 3等大模型的原因解析(ollama核心架构、技术特性、实际应用)
数据结构·人工智能·深度学习·架构·transformer·llama
萌の鱼6 小时前
leetcode 221. 最大正方形
数据结构·c++·算法·leetcode
Joeysoda8 小时前
Java数据结构 (链表反转(LinkedList----Leetcode206))
java·linux·开发语言·数据结构·链表·1024程序员节
努力学习java的哈吉米大王8 小时前
数据结构-LinkedList和链表
数据结构·链表
pystraf9 小时前
P9069 [Ynoi Easy Round 2022] 堕天作战 TEST_98 Solution
数据结构·c++·算法
daiwoliyunshang9 小时前
二叉树--堆排序
数据结构·算法
脏脏a9 小时前
【数据结构篇】顺序表 超详细
c语言·数据结构·算法
汤姆和杰瑞在瑞士吃糯米粑粑10 小时前
【C++学习篇】滑动窗口--结合例题讲解思路
开发语言·数据结构·c++·算法·散列表