在末尾为空值的最小堆中插入一个节点

Inserting a node in a min-heap with a null value at the end

我得到了一个排序的最小堆数组:2,3,4,5,NULL

我想在其中插入值1,第一步如何处理?

       2                     2
    /     \                /  \
   3       4   or this?   3    4
  / \      /             / \   
 5   NULL 1             5   1

如果节点是空的,这会是一样的吗?

一堆整数没有 NULL 个值。我想 NULL 表示堆的容量,这意味着它在满之前只能再增加一个值。

Would be this the same if the node was empty instead?

尽管这种表示很不寻常,但 NULL 只能表示节点 空。如果认为是data,则存在不一致。用于堆中值的数据类型应该是一致的和可比较的。所以 NULL 不是 data.

的选项

插入下一个值时,应使用第一个空槽。然后将其筛选到正确的位置。

因此来自:

     2
    / \
   3   4
  / \     
 5   NULL

     2
    / \
   3   4
  / \
 5   1

     1
    / \
   2   4
  / \     
 5   3

顺便说一句:“排序堆”不是东西。诚然,一个排序列表也是一个堆,但堆的强大之处在于它不需要总是被排序。它只保证堆属性,即父节点永远不会大于它的任何一个子节点。