刚才聊了一会天,思路有点乱了,努力整理了一下!!!
二叉堆其实就是像生成树一样的方式:
其中还是有一些很nice的约束,就拿其中一个三角节点来看,要求父节点的值一定要大于两个子节点的值,然后为了满足这个约束,下面就产生了一些约束生成的伪代码:
算法伪代码:
MAX-HEAPIFY(A,I)
1. l <- LEFT(i) //其中 i,l,r都为上述图片中圆圈外的数组标号,这里将 l 赋值为 i 标号数值为父节点的左子节点标号
2. r <-RIGHT(I) //将 r 赋值为 i 标号数值为父节点的右子节点标号
3. if l <-heap-size[A] and A[l] >A[i] //其中heap-size[A]为该数组的总个数]
4. then largest <- l //如果左节点数值大于父节点数值,就将子节点标号记录下
5. else largest <- i //如果子节点数值不大于父节点数值,就还是记录父节点标号
6. if r <=heap-size(A) and A[r] >A[largest] //将右节点的数值与现任最大数值的节点进行比较
7. then largest <- r /