二叉堆的插入和删除

二叉堆是完全二元树或者是近似完全二元树,一般用数组来表示。它分为最大堆和最小堆。最大/最小堆是指:父结点的键值总是大于/小于或等于任何一个子节点的键值。
本文件的2个函数分别给出最大二叉堆bheap的插入insert_max_heap 和删除delete_max_heap。 (验证时间约 155sec
  其中,堆的"第一个元素(根节点)"放在bheap[1],父节点和子节点的位置关系如下:
    (1) 索引为i的左孩子的索引是 (2*i),   即bheap[i]=bheap[2*i];
    (2) 索引为i的右孩子的索引是 (2*i+1), 即bheap[i]=bheap[2*i+1];
    (3) 索引为i的父结点的索引是 floor(i/2), 即bheap[i]=bheap[i/2];
二叉堆的插入:
  在数组bheap的最末尾插入新节点x。然后自下而上调整子节点与父节点:比较当前节点与父节点,不满足堆性质则交换,直至当前子树满足二叉堆的性质。
二叉堆的删除:
  把数组bheap的最后那个节点移到被删除的(在这里最大值=根节点)节点处,作为父节点。然后再从上而下调整父节点与它的子节点:
对于最大堆,父节点如果小于子节点,则交换二者。直至当前节点与它的子节点满足堆性质为止。

[Back to Index]

验证特点:量化断言,\old

标注说明:本文件有二个函数,分别是二叉堆(最大堆)的插入(任意值)和删除(最大值=根节点)。
     函数前条件:给出堆的大小和函数入口处当前二叉堆的性质;
     函数后条件:插入或者删除元素后,二叉堆长度+1或-1,二叉堆性质保持不变。


程序样例  程序下载

前往验证