采用层次遍历算法,将所有节点加入队列中(包括空节点)。遇到空节点时,查看其后是否有非空节点。若有,则二叉树不是完全二叉树。
bool IsComplete(BiTree T){
InitQueue(Q);
if(!T) return 1;
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 0;
}
}
}
return 1;
}