参考层序遍历的算法,利用队列作为储存结构,将二叉树从上到下,从左到右遍历,对于完全二叉树来说,一旦队列中读到空指针,则必定已将二叉树遍历完全了,否则若空指针后还有为访问的元素,则不是完全二叉树,代码如下
//判断是否为完全二叉树
Status judge_completeBiTree(BiTree T){
if(!T) return OK;
SqQueue Q;
BiTree p;
p=T;
InitQueue(&Q);//初始化队列
EnQueue(&Q,p);//根结点入队
while(!QueueEmpty(Q)){
DeQueue(&Q,&p);
if(!p) break;//读到空指针则停止循环
EnQueue(&Q,p->lchild);//左孩子入队
EnQueue(&Q,p->rchild);//右孩子入队
}
while(!QueueEmpty(Q)){//检查此时队列中是否还有未访问到的结点
DeQueue(&Q,&p);
if(p) return FALSE;
}
return TRUE;
}