什么是完全二叉树:叶子节点只能出现在最后两层,所有叶子节点向左靠
思路:跟层次遍历相似,先将根节点出队,再将根节点出队,再将左右孩子进队,即使左右孩子是空也进队,出队出了一个空节点,假如后面还有非空节点出来,说明不是完全二叉树,如果后面都是空节点,则是完全二叉树。
bool ISCompleteBinaryTree(LinkTree *root)//判断是否为完全二叉树
{
if(!root)
{
return false;
}
LinkTree *r = root;
LinkQueueHead *Q = InitQueue();
EnQueue(Q, r);
while(!QueueIsEmpty(Q))
{
r = Q ->front ->data;
DeQueue(Q,r);
if(r)
{
EnQueue(Q,r ->lchild);
EnQueue(Q,r ->rchild);
}
else
{
while(!QueueIsEmpty(Q))
{
r = Q ->front ->data;
DeQueue(Q, r);
if(r)//有非空节点出队
{
return false;
}
}
}
}
return true;
}