具体思路:
将二叉树层序遍历(节点)插进队列中,遇到空时就break(退出循环),再重新遍历一遍,若空的后面又再次出现数据,则返回false(不是完全二叉树),否则(即前面条件不满足)返回true(是完全二叉树)。
(提前所创树结构):

判断函数:
// 判断二叉树是否是完全二叉树
bool TreeComplete(TreeNode* root)
{
	Queue q;
	QueueInit(&q);
	if (root)
		QueuePush(&q, root);
	int levelSize = 1;
	while (!QueueEmpty(&q))
	{
		TreeNode* front = QueueFront(&q);
		QueuePop(&q);
		if (front == NULL)
			break;
		QueuePush(&q, front->left);
		QueuePush(&q, front->right);
	}
	// 前面遇到空以后,后面还有非空就不是完全二叉树
	while (!QueueEmpty(&q))
	{
		TreeNode* front = QueueFront(&q);
		QueuePop(&q);
		if (front)
		{
			QueueDestroy(&q);
			return false;
		}
	}
	QueueDestroy(&q);
	return true;
}输出结果:

队列的源码位于上篇文章中,可自行参考。

















