第四章第三节 二项队列
二项队列
二项队列是堆序树的集合,这些堆序树是是二项树,每一个高度上最多存在一个二项树;高度为0的二项树是一个单节点树,高度为k的二项树$B_{k}$通过将一个$B_{k-1}$二项树附接到另一个$B_{k-1}$二项树上;如下图示所示,高度为0、1、2、3、4的二项树如下。
高度为k的二项树的节点数为$2^{k}$,因此二项队列可以有任意个节点。
合并
对两个二项队列,首先取并集,按树的高度由高到低考察,对于高度相同的,将其中一个附接到另外一个的根节点上,此时可能又会与已有的二项树高度相同,那么再次合并;遍历一遍之后合并操作完成。
同样的,插入就是合并的特殊情形。
删除
一般指删除最小的根节点。首先,从二项队列中删除这个根节点所在的树,然后这个树删除根节点变成含有两个二项树的二项队列,然后与之前的二项队列合并。
具体实现
使用链表,每个节点指向自己的第一个子节点与右兄弟节点,对于根节点,则是指向下一个二项树的根节点(二项树按照高度排序)。