摘要:}//构造一个二叉堆;小顶堆voidBuildHeap(HuffmanTreet,intlen){for(inti=len/2+len%2;i>0;i--){PercDown(t,i,len);}}//构造二叉堆的功能子函数voidPercDown(HuffmanTreet,intpos,intlen){intchild;structhNodemin=t[pos];while(pos*2<=len){child=pos*2;if(child!=
}
//构造一个二叉堆;小顶堆
void BuildHeap(HuffmanTree t, int len)
{
for (int i=len/2+len%2; i>0; i--)
{
PercDown(t, i, len);
}
}
//构造二叉堆的功能子函数
void PercDown(HuffmanTree t, int pos, int len)
{
int child;
struct hNode min = t[pos];
while (pos * 2 <= len)
{
child = pos * 2;
if (child != len && t[child+1].weight < t[child].weight)
child++;
if (min.weight > t[child].weight)
t[pos] = t[child];
else
break;
pos = child;
}
t[pos] = min;
}
//删除二叉堆的根,并通过上移使得新得到的序列仍为二叉堆
void DeleteMin(HuffmanTree t, int len)
{
struct hNode last = t[len--];//二叉堆的最后一个元素
int child, pos = 1;
while (pos * 2 <= len) //把二叉堆的某些元素往前移,使得新得到的序列仍为二叉堆
{
child = pos * 2;
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10]