二叉堆是一个数组,逻辑结构可以看成近似的完全二叉树。树上的节点对应数组中的一个元素,树除了最底层外,该树是完全二叉树,而是从左向右填充。结构如下:
表示堆的数组A [1,...,length]有如下俩个属性:
length : 数组长度;
heap-size :堆元素的个数;
关系 :0 <= A.heap-size <= A.length
树的根节点为 A[1];
节点高度:该节点到根节点最长简单路径上的边的数目,即↓lgi(以2为底的对数,再向下取整)
某个节点为A[i] ,若该节点存在父节点、左右孩子节点 :
父节点(PARENT(i)):m = ↓(i/2) 向下取整, A[m]
左孩子节点(LEFT(i)):A[2i]
右孩子节点(RIGHT(i)) : A[2i+1]
最大堆 : A[PARENT(i)] >= A[i]
最小堆 : A[PARENT(i)] <= A[i]