自下而上的堆构造不完全取决于 (n+1) 是 2 的幂这一事实吗?(其中 n 是节点数)。
例如,考虑 n = 21 的情况。 (n +1) 不是 2 的幂 - 这将如何工作?
您将创建第一个插入 (n+1)/2 个节点,即 11 个节点。然后,您将插入 (n+1)/4 个节点作为先前插入的节点的父节点,即 5.5 个节点。但是“半个节点”怎么插入呢?每当 n 不是 2 的幂时,您总是会在某个级别上获得十进制的节点插入量 - 您如何处理这个问题?
我考虑删除一定数量的节点,以便剩余节点是 2 的幂,从剩余节点中构建一棵树,然后在完成后将删除的节点冒泡到树中。但是对于大量节点,这变得不可行:即节点数 = 1600。最接近 2 的幂是 1024,这意味着您必须冒泡 576 个节点,这相对耗时。