题目:二叉树采用二叉链表存储结构,写出判别给定二叉树是否是完全二叉树的算法
算法思想:采用层次遍历的算法,将所有的结点加入队列Queue(包括空结点)。当遇见空结点时,查看后面是否有节点。若有,则该二叉树不是完全二叉树。
在这里插入代码片
Bool iscomplete(Bitree T){ //本算法判断二叉树是否为完全二叉树
initQueue(Q); //初始化一个队列
If(!T) return ;
Else{
EnQueue(Q,T); //将二叉树的节点进队列
While(!empty(Q)){ //当含有二叉树结点的队列不为空时
DeQueue(Q,p); //将p所指结点出队列Q
If(p){ //如果二叉树中指针p所指节点存在
EnQueue(Q,p->lchild);
EnQueue(Q,p->rchild); //继续将P指针的左右孩子入队列
}
Else{ //p所指结点为空
While(!empty(Q)){
DeQueue(Q,p);
If(p) Return 0; //结点p所指结点为空,其后存在非空节点,则不是完全二叉树
}
}
}
}