判断完全二叉树
一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树
基于层序遍历的思想,判断每层遍历结束后,取出队列中的结点,判断该层的结点是否还有子结点,则为非完全二叉树。整颗树遍历结束后如果没有上述情况则为完全为二叉树。
bool IsCompelete(BiTree T){
if(!T){
return true;
}
InitQueue(Q);
BiTNode *p = T;
EnQueue(Q,p);
while(!IsEmpty(Q)){
DeQueue(Q,p);
if(p->lchild){
EnQueue(Q,p->lchild);
}
if(p->rchild){
EnQueue(Q,p->rchild);
}
else if(!p->lchild && !p->rchild)
DeQueue(Q,p);
if(p->lchild || p->rchild)
return false;
}
return true;
}