(二插)堆是一个数组,可以被看成一个近似的完全二叉树。
树的根节点是A[1]
第一步:
给定一个节点的下标i,我们可以计算得到它的 父结点和左右孩子的下标:
int Parent(int i)
{
return floor(i / 2.0);
}
int Left(int i)
{
return 2 * i;
}
int Right(int i)
{
return 2 * i + 1;
}
最大堆性质:除了根以外的所有节点i都满足:
A[Parent(i)] >= A[i]
最小堆性质:除了根以外的所有节点i都满足:
A[Parent(i)] <= A[i]
以下我们讨论最大堆。