完全二叉树(包括满二叉树 )
利用层序遍历,当取顶取到空的时候(这个时候取的这一层的所有节点是一定在队列里面的),就结束入队,然后判断他的后面的节点是否都为空
这里重点还是要理解二叉树的层序遍历,如果看不懂就去看上一章写的二叉树的层序遍历
int BinaryTreeComplete(BTNode* root)
{
Queue L;//定义一个队列的变量
QueueInit(&L);//初始化队列
if (root)
{
QueuePush(&L, root);//把根节点的指针存入到队列中
}
while (!QueueEmpty(&L))
{
BTNode* front = QueueFront(&L);//把队列的头元素去出来,定义一个变量接收
if (front == NULL)
{
break;
}
QueueBack(&L);
QueuePush(&L, front->left);
QueuePush(&L, front->right);
}
while (!QueueEmpty(&L))
{
BTNode* front = QueueFront(&L);//把队列的头元素去出来,定义一个变量接收
QueueBack(&L);
if (front != NULL)//判断后面的节点是否都为空
{
return false;
}
}
return true;
}