题目描述:二叉树按二叉链表形式存储,试编写一个判别给定二叉树是否是完全二叉树的算法。
分析: 完全二叉树的性质之一是:叶子结点只会出现在最后两层上且当出现一个叶子结点时其后的所有结点都应为叶子结点。按照这个思路考虑使用层次遍历,将所有的结点入队(无论有没有左右结点),当出队的结点为空时,判断后序的结点是否全为空。
bool IsTree(BiTree T){
InitQueue(Q);
BiTNode *p;
EnQueue(Q,T);
while(!IsEmpty(Q)){
DeQueue(Q,p);
if(p){
EnQueue(Q,p->lchild);
EnQueue(Q,p->rchild);
}
else{
while(!IsEmpty(Q)){
DeQueue(Q,p);
if(p) //之后的结点不为叶子结点
return false;
}
}
}
return true;
}