【正确答案】利用二叉树的层次序遍历,让二叉树中的结点逐层进队列,如果中途有空结点,则说明不是完全二叉树。队列大小n由#define声明。
int isComplete_BinTree(BTNode *T)
{
BTNode *p=T;
if(p==NULL) //空二叉树是完全二叉树
return 1;
BTNode *Q[n];
int front=0,rear=0; //队列
int flag=0; //flag标识遍历中未遇到空队列元素
Q[rear]=p;
rear=(rear+1) % n; //根进队列
while(front !=rear)
{
p=Q[front];
front=(front+1) % n;
if(p==NULL)
flag=1; //遍历中遇到空队列元素
else if(flag)
return 0; //前面夹杂空队列元素,非完全二叉树
else
{ //不管孩子是否为空,都入队列
Q[rear]=p→lchild;
rear=(rear+1) % n;
Q[rear]=p→rchild;
rear=(rear+1) % n;
}
}
return 1;
}
【答案解析】