文章目录
  1. 左式堆
  2. 合并
  3. 删除
  4. 斜堆

左式堆

为了使”合并”操作更高效,介绍特殊的堆——左式堆。首先,将一个节点X的零路径长Npl(X)定义为从X到一个没有双子节点的节点的最短(这里的最短是指在所有的没有双子节点的节点中)路径长度。显然,具有0或1个子节点的节点的Npl为0;将Npl(NULL)记为-1。

一个堆是左式堆当堆中任一节点的左子节点的零路径长不小于右子节点的零路径长;

合并

插入可以看作合并的特殊情形;合并采用递归的做法:对两个堆,将大根值的堆与小根值的堆的右子堆进行合并(递归进行),合并之后若堆不是左式堆,则交换左右子堆即可!交换完之后需要更新零路径长(右子树的零路径长加1)。合并的新堆作为小根值堆的右子堆。

删除

一般删除根节点,删除之后将两个左式堆合并即可!

斜堆

斜堆是左式堆的自调节形式,实现及其简单;与左式堆一样,斜堆也是为合并操作而设计。对斜堆的合并也是采用递归的方法,不同之处在于此时不会比较左右节点的零路径,而是一律交换左右子堆;