判断二叉树是否是完全二叉树
算法思想:利用层次遍历,设置一个标志位,遍历过程中如果遇到空节点,则修改标志位。继续遍历二叉树,后面如果遇到有效节点,且标志位已经被修改则可以判断其不是完全二叉树。
/*
如下所示代码为伪代码,仅仅作为理解算法,结合具体问题可做适当修改
*/
#define MAX 100
int isCompleteBt(node head)
{
node Q[MAX],tmp;
int f = 0;r = 0;tag = 0;//标志位初始置0
Q[f++] = head;
while(f != r)
{
tmp = Q[r++];
if(tmp){
if(tag)return 0;//返回0表示不是完全二叉树
Q[f++] = tmp->lc;Q[f++] = tmp->rc;//注意访问节点的左右指针均入队,即便为空指针亦入队。
}else tag = 1;
}
return 1;//程序能够执行完while循环,则表明其为完全二叉树
}