检查二叉树是否为完全二叉树
算法思想:检查二叉树是否为完全二叉树思想就是与满二叉树做对比,可知完全二叉树只有最右面是空的。采用层次遍历的方式在入队列的过程中空指针也要进行入队若空指针后面还有非空元素则该二叉树不是完全二叉树
结构体
typedef struct BiTree{
char data;
BiTree *lchild;
BiTree *rchild;
};
代码:
int IsComplete(BiTree *T){
if(!T){ //空树是完全二叉树
return 1;
}
BiTree *que[MaxSize];
int front=-1,rear=-1; //定义头指针尾指针
que[++rear]=T; //根节点入队
while(front<rear){ //当front =rear 的时候 跳出循环此时也是队空的时候
T=que[++front];
if(T){
que[++rear]=T->lchild;
que[++rear]=T->rchild;
}else{
while(front<rear){
T=que[++front];
if(T!=NULL){
return 0;
}
}
}
}
return 1;
}
测试数据