算法之路_13、堆操作预备知识

一、解释

堆通常是一个可以被看做一棵树的数组对象。所以在认识堆之前,我们先来了解了解满二叉树和完全二叉树,这样在后面做堆问题时会有很大帮助。

满二叉树:对于满二叉树的定义呢,国内和国外有所不同。本篇博文中按照国内定义。

满二叉树定义:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点二叉树。即一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。

示例:     

满二叉树满足如下性质(都可以通过数学归纳的方法证明,有兴趣的可以自己试试):

  1、一个层数为k 的满二叉树总结点数为: 。因此满二叉树的结点树一定是奇数个。

  2、第i层上的结点数为:

  3、一个层数为k的满二叉树的叶子结点个数(也就是最后一层):

        4、i位置元素的父节点位置为 i-1/2  左孩子节点位置为:2*i+1 右孩子结点位置为:2*i+2

完全二叉树:

定义:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。

示例:

可以看出,满二叉树实际上是一个特殊的完全二叉树。

发布了56 篇原创文章 · 获赞 42 · 访问量 43万+

猜你喜欢

转载自blog.csdn.net/SIMPLE1995/article/details/86571231
今日推荐