二叉堆:
每个父节点的值都大于等于(或者小于等于)其两个孩子的值,那么就称这种特殊的数据结构为二叉堆
二叉堆数据结构是一种数组对象,把它可以看作一棵完全二叉树结构或近似二叉树结构。在逻辑层面二叉堆是一种特殊的树形数据结构,一般用数组存储二叉堆的节点元素,所以在物理层面二叉堆是一个数组
二项式堆,斐波纳契堆等其它堆用的较少,一般将二叉堆简称为堆(以下表述中直接说堆了)
堆满足的两个特征:
- 父节点的键值大于或等于(小于或等于) 任何一个子节点的键值
- 每个节点的左子树和右子树都是一个堆(最大堆或最小堆)
当父节点的键值大于或等于左右孩子节点的键值是称为最大堆
当父节点的键值小于或等于左右孩子节点的键值时称为最小堆
注意:堆中两个孩子之前的大小没有关系,可能左孩子>=右孩子,也可能右>=左
堆的存储:
堆一般存储在下标为0开始的数组中,下图是一个小堆的存储
因此在堆中给定下标为i的结点时:
如果i=0,结点i是根节点,没有双亲节点;否则结点i的双亲结点为(i-1)/2
如果2 * i + 1 <= n - 1,则结点i的左孩子为结点2 * i + 1,否则结点i无左孩子
如果2 * i + 2 <&