判断二叉树是否为完全二叉树

具体思路:

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

(提前所创树结构):

判断二叉树是否为完全二叉树_第1张图片

判断函数:

// 判断二叉树是否是完全二叉树
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;
}

输出结果:

判断二叉树是否为完全二叉树_第2张图片

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

你可能感兴趣的:(数据结构和算法,数据结构,算法,c语言)