通过队列实现判断一棵二叉树是否为完全二叉树
2014-04-28 22:31
274 查看
要实现题目的功能,则需在用队列遍历层次遍历二叉树的代码基础上作修改
层次遍历二叉树代码如下void LevelOrder(BiTree bt, void (*visit)(TElemType))
/* travel BiTree bt by level, Return result by ss. */
{
if(!bt) return;
BiTree p=bt;
int i=0;
Queue Q;
InitQueue(Q);
if(p!=NULL)
{
EnQueue(Q,p);
while(!QueueEmpty(Q))
{
DeQueue(Q,p);
visit(p->data);
if(p->lchild!=NULL)
EnQueue(Q,p->lchild);
if(p->rchild!=NULL)
EnQueue(Q,p->rchild);
}
}
}然而在这段代码基础作修改上,我们将换另一种思维方式,即无论结点的左右孩子是否为空,都入队列,当二叉树不是完全二叉树时,则会遍历到空指针,代码如下:
Status CompleteBiTree(BiTree bt)
/* judge if the binary tree whose root is bt */
/* is a complete tree. */
{
if(!bt) return TRUE;
BiTree p=bt;
Queue Q;
int hasNullPointer=0;
InitQueue(Q);
if(p!=NULL)
{
EnQueue(Q,p);
while(!QueueEmpty(Q))
{
DeQueue(Q,p);
if(!p) hasNullPointer=1;
else if(hasNullPointer==1) return FALSE;
else{
EnQueue(Q,p->lchild); //无论结点的左右孩子是否为空,都入队列
EnQueue(Q,p->rchild);
}
}
}
return TRUE;
}
层次遍历二叉树代码如下void LevelOrder(BiTree bt, void (*visit)(TElemType))
/* travel BiTree bt by level, Return result by ss. */
{
if(!bt) return;
BiTree p=bt;
int i=0;
Queue Q;
InitQueue(Q);
if(p!=NULL)
{
EnQueue(Q,p);
while(!QueueEmpty(Q))
{
DeQueue(Q,p);
visit(p->data);
if(p->lchild!=NULL)
EnQueue(Q,p->lchild);
if(p->rchild!=NULL)
EnQueue(Q,p->rchild);
}
}
}然而在这段代码基础作修改上,我们将换另一种思维方式,即无论结点的左右孩子是否为空,都入队列,当二叉树不是完全二叉树时,则会遍历到空指针,代码如下:
Status CompleteBiTree(BiTree bt)
/* judge if the binary tree whose root is bt */
/* is a complete tree. */
{
if(!bt) return TRUE;
BiTree p=bt;
Queue Q;
int hasNullPointer=0;
InitQueue(Q);
if(p!=NULL)
{
EnQueue(Q,p);
while(!QueueEmpty(Q))
{
DeQueue(Q,p);
if(!p) hasNullPointer=1;
else if(hasNullPointer==1) return FALSE;
else{
EnQueue(Q,p->lchild); //无论结点的左右孩子是否为空,都入队列
EnQueue(Q,p->rchild);
}
}
}
return TRUE;
}
相关文章推荐
- 二叉树采用二叉链表存储,设计算法判断给定的二叉树是否是一棵完全二叉树,采用先进先出的队列。
- 二叉树的链式存储结构 前序 后序 中序 层序遍历操作实现 判断是否完全二叉树
- 判断一棵二叉树是否为完全二叉树
- 剑指Offer 面试题28:判断一棵二叉树是否镜对称 Java代码实现
- 如何判断一棵二叉树是否是完全二叉树
- 判断一棵二叉树是否为搜索二叉树、完全二叉树、平衡二叉树(java)
- 判断一棵二叉树是否为完全二叉树
- 判断一棵二叉树是否为完全二叉树
- 判断一棵二叉树是否是完全二叉树
- 判断一棵二叉树是否是完全二叉树
- 判断一棵二叉树是否是完全二叉树的方法
- 判断一棵二叉树是否为另一棵二叉树的子树,Python实现
- 编程实现判断一棵二叉树是否是平衡二叉树
- 8-32 判断一棵二叉树是否是完全二叉树
- 以二叉链表的方式创建一棵二叉树,并以非递归算法中序输出;计算二叉树的繁茂度,并判断二叉树是否为完全二叉树
- 二叉树镜像(递归和非递归)+ 判断一棵二叉树是否是平衡二叉树+ 判断一棵树是否为完全二叉树
- 【面试题】判断一棵二叉树是否是完全二叉树
- 通过文件锁实现,程序开始运行时,先判断文件是否存在,若存在则表明该程序已经在运行了,如果不存在就用open函数创建该文件,程序退出时关闭文件并删除文件。
- 输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- 二叉树:判断二叉树是否另一棵二叉树的子树