完全二叉树和满二叉树的区别+完全二叉树求节点问题

标签: 满二叉树 完全二叉树
278人阅读 评论(0) 收藏 举报

今天复习了下二叉树的相关知识,发现很多都忘掉了,所以在此记录下

满二叉树


如图,顾名思义,满二叉树说白了其实就是除了最后一层,所有节点都有两个孩子,
所以:
假设现在有一棵深度为N的满二叉树:
总结点数就是2^N-1(计算公式:2^0 + 2^1 +…+2^(N-1))
叶子节点数就是2^(N-1)(上图中叶子节点也就是第三层的节点数位2^2 = 4)

完全二叉树


如图,完全二叉树就是除了最后一排,其余的都是满二叉树,最后一排的节点都连续靠左。
所以:
如果给定了一个完全二叉树的总结点数,那么对应应该可以求出他的叶子节点数已经深度。
例如:总结点数位770,求叶子节点

方法一:(详细步骤)

如下:
2^9 - 1 = 511 < 770
2^10 - 1 = 1023 >770
所以 这个完全二叉树一共有10层;前9层总结点是511,所以第10层的叶子节点为770 - 511 = 259,
*特别注意*
因为最后一层不是满的,所以倒数第二层也露出了一些节点,那些节点也算是叶子节点!
第9层总结点数为 2*(9-1) = 256,
第10层一共259个叶子节点,他们的父节点是在第9层的,也就是round(259/2)(向上取整 = 130)这么多个第9层节点延伸下来的,也就是第9层这些节点是有孩子的,剩下的256 - 130 = 126没有孩子,也是算叶子节点的。
所以总共 126 + 259 = 385个叶子节点。

方法二(简便算法)

如下:
首先了解下定义:
有两个子节点的节点叫做度数为2的节点,这里称作D2
有一个子节点的节点叫做度数为1的节点,这里称作D1
有0个子节点的节点叫做度数为0的节点,这里称作D0(叶子节点)
于是:
总节点数=D2 + D1 + D0
另外:
D2它会产生两个新节点,D1产生一个新节点,还有一个根节点本身就存在
所以总结点数 = D2 * 2 + D1 * 1 + 1
联合两个方程得到:
D2 + 1 = D0
也就是度数为0的节点数总是比度数为2的节点数多1个
了解这一点很重要!!!

好了,下面开始简单运算过程:
假设总结点数为N,那么就有:
N = D2 + D1 + D0
又因为之前上面提到 D2 + 1 = D0,所以
N = D0 - 1 + D1 + D0
N = 2D0 + D1 - 1

注意:充分了解完全二叉树的定义可知,度为1的节点只有可能为0或者1
所以,D1 = 1 OR 0,两种情况都带入
D1 = 0时:
N = 2D0 - 1
D0 = (N + 1) / 2
D1 = 1时:
N = 2D0
D0 = N / 2
D0是个整数,所以D0 = N / 2(向上取整)

总结:
叶子节点数 = 总结点数 / 2 (向上取整)

查看评论

数据结构基础系列(6):树和二叉树

数据结构课程是计算机类专业的专业基础课程,在IT人才培养中,起着重要的作用。课程按照大学计算机类专业课程大纲的要求,安排教学内容,满足需要系统学习数据结构的人。系列课程包含11个部分,本课为第6部分“树和二叉树”,介绍树的相关概念和表示方法,重点是二叉事的性质、存储结构、遍历等基本操作的实现,以及应用基本操作解决问题的方法。
  • 2015年10月18日 06:22

树、二叉树、满二叉树、完全二叉树概念分清

自由树 自由树是一个连通的,无回路的无向图。 令G=(V,E)为一个无向图。下面的表述是等价的。 1)        G是自由树。 2)        G中任意两个顶点由唯一一条简单路径得到。...
  • chengmaoning
  • chengmaoning
  • 2013-09-09 23:00:00
  • 1713

满二叉树和完全二叉树

二叉树分类很多,其中满二叉树哦和完全二叉树比较特殊,因为这两种二叉说效率很高,这里记录几条相关性质。   首先是满二叉树:从形象上来说满二叉树是一个绝对的三角形,也就是说它的最后一层全部是叶子节点...
  • foreverhuylee
  • foreverhuylee
  • 2014-08-07 14:01:24
  • 7673

完全二叉树和满二叉树的区别

其实满二叉树是完全二叉树的特例,因为满二叉树已经满了,而完全并不代表满。所以形态你也应该想象出来了吧,满指的是出了叶子节点外每个节点都有两个孩子,而完全的含义则是最后一层没有满,并没有满。 下...
  • mawming
  • mawming
  • 2015-06-12 14:34:28
  • 7910

满二叉树和完全二叉树的区别

完全二叉树(Complete Binary Tree): 在最后一层,并不是所有节点都有两个子节点,这类二叉树又称为完全二叉树(Complete Binary Tree),入下图: ...
  • wuxiaobingandbob
  • wuxiaobingandbob
  • 2015-06-15 09:38:22
  • 7579

完美二叉树, 完全二叉树和完满二叉树

完美二叉树, 完全二叉树和完满二叉树本文出处:http://www.cnblogs.com/idorax/p/6441043.html树在数据结构中占有非常重要的地位。本文从树的基本概念入手,给出完美...
  • HaoDaWang
  • HaoDaWang
  • 2017-09-22 17:19:47
  • 2975

数据结构之满二叉树和完全二叉树的区别

二叉树分类很多,其中满二叉树和完全二叉树比较特殊,因为这两种二叉树效率很高,这里记录几条相关性质。   首先是满二叉树:从形象上来说满二叉树是一个绝对的三角形,也就是说它的最后一层全部是叶子节点,其余...
  • zkn_CS_DN_2013
  • zkn_CS_DN_2013
  • 2015-08-27 18:53:08
  • 1835

【C++】满二叉树与完全二叉树的区别及判断

满二叉树与完全二叉树的区别: (1)完全二叉树,除最后一层可能不满以外,其他各层都达到该层节点的最大数;最后一层如果不满,该层所有                               节点都...
  • ZDF0414
  • ZDF0414
  • 2015-11-29 14:12:10
  • 1193

完全二叉树 满二叉树

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

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

二叉树:树中每个节点至多有两个子节点二叉搜索树:对于树中任何节点,如果其左子节点不为空,那么该节点的value值永远 >= 其左子节点;如果其右子节点不为空,那么该节点的value值永远 ...
  • joenqc
  • joenqc
  • 2017-07-10 14:07:58
  • 1645
    个人资料
    等级:
    访问量: 3393
    积分: 59
    排名: 166万+
    文章分类
    文章存档
    最新评论