在创建二项式堆时,我知道一般程序是首先创建一个指向 nil 的头,然后慢慢插入 1 节点堆,并根据 4 种情况将具有相同程度的堆联合起来。
但是,我想问一下,给定一个大小为 n 的数组,是否有可能由于最多有 floor(lg n) + 1 个二叉树,我们根据树的数量对数组进行分区,2^0, 2^ 1, 2^2 以此类推,在每棵二叉树中冒泡,使得每棵树都满足 minheap 属性?
例如:给定数组 [4, 10, 8, 20, 5, 1, 3]
- 如果一个一个插入,根列表是3、1和4。1有子5;4 有孩子 8 和 10,8 有孩子 20。
- 在另一种情况下:我们有根列表 4、8 和 1。8 有子 10;1 有孩子 3 和 20,3 有孩子 5。
如果以这种方式完成,它会破坏二项式堆的全部目的吗?