堆的定义 插入 删除和 哈夫曼树的构造
什么是堆
- 堆是一种特殊的队列,取出元素的顺序依据元素优先权的大小,而不是进入的先后顺序
- 堆的结构性:用数组表示的完全二叉树;堆的有序性:任意节点的关键字是其子树中最大的

堆的创建


堆的插入
public static void Insert(MaxHeap H, ElementType item) {
int i;
if (IsFull(H)) {
System.out.printf("最大堆已满");
return;
}
i = ++H -> Size;//从下往上
for (; H -> Elements[i / 2] < item; i /= 2) {//如果父节点小,让父节点下来
H -> Element[i] = H -> Elements[i / 2];
}
H -> Element[i] = item;
}
堆的删除
public static void Delete(MaxHeap H) {
int parent, child;
ElementType Max, tmp;
if (!isEmpty(H)) {
System.out.println('删除完毕');
return;
}
Max = H -> Element[1];
tmp = H -> Element[H -> size--];
for (parent = 1; parent * 2 <= H -> size; parent = child) {//判断是否有儿子节点
child = parent * 2;
if (child != H -> size && H -> Element[child] < H -> Element[child + 1])
child++;//选大的儿子节点
if (tmp >= H -> Element[child])
break;
else
H -> Element[parent] = H -> Element[child];//如果儿子节点大,让儿子节点上去
}
H -> Element[parent] = tmp;
}
哈夫曼树的构造


浙公网安备 33010602011771号