问答题 编程,判断一棵二叉链表表示的二又树是否是完全二叉树。【南京航空航天大学2001年】
【正确答案】正确答案:算法的基本设计思想:判定是否是完全二叉树,可以使用队列进行从上至下、从左至右的层次遍历,当首次出现叶子结点或无右孩子结点后,后面全部都应该是叶子结点。同时在遍历中利用完全二叉树“若某结点无左子女就不应有右子女”的原则进行判断。算法的代码: int JudgeComplete(BiTree bt) { //判断二叉树是否是完全二叉树,如是,返回1,否则,返回0 int tag=0; BiTree p=bt,Q[]; //Q是队列,元素是二叉树结点指针,容量足够大 if(p==NULL) return 1; QueueInit(Q); QueueIn(Q,p); //初始化队列,根结点指针入队 while(!QueueEmpty(Q)) { p=QueueOut(Q); //出队 if(p一>1chiid&&!tag) QueueIn(Q,p一>ichild); //左子女入队 e1Se { if(p一>ichiid) //前边已有结点为空,本结点不空 return 0; else //首次出现结点为空 tag=1; } if(p一>rchiId&&!tag) QueueIn(Q,p一>rchild); //右子女入队 e1Se { if(p一>rchiid) return 0; e1Se tag=1; } }//while return 1; } //JudgeCOmplete 完全二叉树证明还有其他方法。判断时易犯的错误是证明其左子树和右子树都是完全二叉树,由此推出整棵二叉树必是完全二叉树的错误结论。
【答案解析】