一、思路
我们想要判断二叉树是否为完全二叉树
我们可以用队列来实现
我们先将根节点入队列
再将根节点出队列,判断取出节点是否为空、
若不为空将该节点的左右节点入队列
左右节点为空也入队列
若为空则停止入队列
然后判断队列中是否有 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;
}