问答题 设一棵二叉树T采用二叉链表表示,编写一个算法,判断T是否是完全二叉树。
【正确答案】利用二叉树的层次序遍历,让二叉树中的结点逐层进队列,如果中途有空结点,则说明不是完全二叉树。队列大小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; }
【答案解析】