设计一个算法,判断一个二叉树是否为完全二叉树

原创 2015年07月08日 01:26:23

思想:根据完全二叉树的定义,对完全二叉树按照从上到下、从左到右的层次遍历,应该满足一下两条要求:

某节点没有左孩子,则一定无右孩子

若某节点缺左或右孩子,则其所有后继一定无孩子

若不满足上述任何一条,均不为完全二叉树。

算法思路:采用层序遍历算法,用cm变量值表示迄今为止二叉树为完全二叉树(其初值为1,一旦发现不满足上述条件之一,则置cm为0),bj变量值表示迄今为止所有节点均有左右孩子(其初值为1),一旦发现一个节点没有左孩子或没有右孩子时置bj为0),在遍历完毕后返回cm的值。

对应的算法如下:

int CompBTNode(BTNode * b)

{

BTNode *Qu[MaxSize],*p; //定义一个队列,用于层次遍历

int front=0,rear=0; //队头、队尾指针

int cm=1;

int bj=1;

if(b!=NULL)

{

rear++;

Qu[rear]=b; //进队

while(front!=rear)

{

front++;

p=Qu[front];

if(p->lchild==NULL) //*p节点没有左孩子

{

bj=0;

if(p->rchild!=NULL) //没有左孩子但有右孩子

cm=0; //则不是完全二叉树

}

else //*p节点有左子树

{

if(bj==1) //迄今为止,所有节点均有左右孩子

{

rear++; //左孩子进队

Qu[rear]=b->lchild;

if(p->rchild==NULL) //*p有左孩子但没有右孩子

bj=0;

else

{

rear++; //右孩子进队

Qu[rear]=p->rchild;

}

else //bj=0:迄今为止,已有节点缺孩子

cm=0; //而此时*p节点有左孩子,违反(2)

}

}

return cm;

}

return 1; //把空树当成特殊的完全二叉树

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++算法之 判断是否为完全二叉树

判断完全二叉树: 完全二叉树,除最后一层外,每一层上的节点树都达到了最大值;在最后一层上只缺少右边的若干节点! 算法思路: 按层次(从上到下,从左到右)遍历二叉树,当遇到一个节点的左子树为空时,...
  • djb100316878
  • djb100316878
  • 2015年01月12日 11:36
  • 4841

如何判断一棵二叉树是完全二叉树

严蔚敏那本教材上的说法:一个深度为k,节点个数为 2^k - 1 的二叉树为满二叉树。这个概念很好理解,就是一棵树,深度为k,并且没有空位。首先对满二叉树按照广度优先遍历(从左到右)的顺序进行编号。一...
  • njdragonfly
  • njdragonfly
  • 2011年04月30日 01:23
  • 28543

二叉树采用二叉链表存储,设计算法判断给定的二叉树是否是一棵完全二叉树,采用先进先出的队列。

#include #include typedef struct biTree { //二叉树结构 char data1; struct biTree *lchild,*rchild; }b...
  • baidu_34638825
  • baidu_34638825
  • 2016年10月24日 22:55
  • 1881

完全二叉树 满二叉树

概念 结点的层次(Level)从根开始定义,根为第一层,根的孩子为第二层。 二叉树的高度:树中结点的最大层次称为树的深度(Depth)或高度。 数据结构中,树的度是什么?  它是树内各结点的度的...
  • bigtree_3721
  • bigtree_3721
  • 2016年05月15日 12:03
  • 5813

二叉树、平衡二叉树、完全二叉树、满二叉树

基本概念结点的层次(Level)从根开始定义,根为第一层,根的孩子为第二层。二叉树的高度:树中结点的最大层次称为树的深度(Depth)或高度。 二叉树在计算机科学中,二叉树是每个结点最多有两个子树的有...
  • hytdsky
  • hytdsky
  • 2009年11月07日 21:43
  • 61055

判断一棵二叉树是否为完全二叉树

1.完全二叉树的特点(来自专业定义) 看到上面完全二叉树的特点,我可以将其特点按照自己的理解归纳为以下几点: (1):若二叉树最下面一层有节点出现,那么这个节点一定是是从左到右依次排列,若...
  • woaimeinuo
  • woaimeinuo
  • 2016年07月16日 20:46
  • 6156

完全二叉树与满二叉树

去笔试了很多次,每次都有有关于二叉树的题目,而且其中最多的是关于完全二叉树,然而完全二叉树在哥心中的形态一直很模糊,究其原因是我把完全二叉树和满二叉树搞混了。其实满二叉树是完全二叉树的特例,因为满二叉...
  • Yelbosh
  • Yelbosh
  • 2012年10月06日 17:19
  • 53822

满二叉树、完全二叉树、完美二叉树等概念的解释

二叉树:树中每个节点至多有两个子节点二叉搜索树:对于树中任何节点,如果其左子节点不为空,那么该节点的value值永远 >= 其左子节点;如果其右子节点不为空,那么该节点的value值永远 ...
  • joenqc
  • joenqc
  • 2017年07月10日 14:07
  • 848

二叉树:搜索二叉树和完全二叉树

二叉树:搜索二叉树和完全二叉树
  • qq_27703417
  • qq_27703417
  • 2017年05月02日 22:34
  • 693

满二叉树和完全二叉树

二叉树分类很多,其中满二叉树哦和完全二叉树比较特殊,因为这两种二叉说效率很高,这里记录几条相关性质。   首先是满二叉树:从形象上来说满二叉树是一个绝对的三角形,也就是说它的最后一层全部是叶子节点...
  • foreverhuylee
  • foreverhuylee
  • 2014年08月07日 14:01
  • 7579
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计一个算法,判断一个二叉树是否为完全二叉树
举报原因:
原因补充:

(最多只允许输入30个字)