目录
1.用队列实现层序遍历(判断是否为完全二叉树)
1.实现层序遍历
void LevelOrder(BTNode* root)
{
Queue q;//创建一个队列,
QueueInit(&q);//队列初始化
if (root)
{
QueuePush(&q, root);//将头节点入队列
}
while (!QueueEmpty(&q))//队列不为空,则继续
{
BTNode* front = QueueFront(&q);
QueuePop(&q);//节点出队列
printf("%d ", front->data);
if (front->left)//左孩子进队列
{
QueuePush(&q, front->left);
}
if (front->right)//右孩子进队列
{
QueuePush(&q, front->right);
}
}
printf("\n");
QueueDestory(&q);//销毁队列
}
2.判断二叉树是否为完全二叉树
思想:用队列实现层序遍历,孩子为NULL也进队列,当出队列的元素是NULL时,把后面所有元素都出队列。若后面元素都为空,即是完全二叉树,若不是,则非完全二叉树。2
bool BTreeComplete(BTNode* root)
{
Queue q;
QueueInit(&q);
if (root)
QueuePush(&q, root);
while (!QueueEmpty(&q))
{
BTNode* front = QueueFront(&q);
QueuePop(&q);
if (front == NULL)//队列出元素,若是NULL,则break,后面把所有元素出队列
break;
QueuePush(&q, front->left);
Queu