【问题标题】:Implementing a binary heap using a linked list [duplicate]使用链表实现二叉堆[重复]
【发布时间】:2025-11-30 22:20:05
【问题描述】:

可能重复:
Linked list implementation of Binary Min Heap (Having trouble with manipulation…)

您好,

我在找出一种算法时遇到了麻烦,该算法将为我提供二叉堆的链表实现中树节点的位置。我已经使用数组实现了一个堆,现在我想尝试使用链表;如果我使用数组来表示堆,有没有办法找到其数组索引的树节点?

【问题讨论】:

    标签: java algorithm heap binary-tree


    【解决方案1】:

    有什么意义?链表实现将比基于数组的实现更慢或更复杂。如果你用一个简单的链表替换数组并且不添加其他结构,你的插入时间将是 O(n) 而不是 O(log n),然后你也可以在相同的 O(n ) 复杂性。

    【讨论】:

    • 二进制堆并不总是更好。您可以使用无序列表实现堆。对于大小为 n 的列表,它将具有 O(1) 插入和 O(n) 删除时间复杂度。对于删除和插入,二进制堆都是O(n log n)。如果您只需要进行少量(即恒定)删除,那么链表将是您的选择。在实际实践中,一个很好的例子是为 Dijkstra 算法使用堆,您需要 |E| 插入和 |V| 删除。在这种情况下,如果你有一个密集图,链表肯定更好,但二叉堆更适合稀疏图。
    【解决方案2】:

    【讨论】: