从二进制堆中删除叶子的时间复杂度

时间:2013-11-16 05:55:44

标签: algorithm data-structures time-complexity binary-heap

从堆中删除叶节点的时间复杂度是多少?

我认为如果你不知道节点在哪里,它就会记录,因为你必须找到它。

但如果你已经知道节点在哪里,它应该是O(1)对吗?既然你可以删除它而不必重新堆叠所有内容?

1 个答案:

答案 0 :(得分:7)

请记住,二进制堆必须是完整的二叉树,因此如果删除最后一个叶子以外的叶子,则需要移动一些东西来代替它。一种方法是将它与最后一个叶子交换,删除最后一个叶子,然后执行一个冒泡步骤以确保堆属性仍然成立。除了实际定位要删除的叶节点的时间之外,这需要时间O(log n)。

希望这有帮助!

相关问题