之前在Stack Exchange中曾问过这个问题,但没有得到解答。

链接到先前询问的问题:
Binary Heap Implemented via a Binary Tree Structure

如何在二叉树中实现堆。要实现堆,了解最后一个已填充节点和第一个未占用节点很重要。可以按树的级别顺序完成此操作,但是仅查找第一个未占用的节点,时间复杂度将为O(n)。那么,如何在O(logn)的二叉树中实现堆?

谢谢
舍哈尔

最佳答案

要使用时间复杂度为O(log n)的二叉树实现堆,您需要将节点总数存储为实例变量。

假设我们有一个总共10个节点的堆。

如果我们要添加一个节点...

我们将节点总数增加一。现在共有11个节点。我们将新的节点总数(11)转换为其二进制表示形式:1011。

使用总节点的二进制表示(1011),我们摆脱了第一位数字。然后,我们使用011在树中导航到下一个位置,以在其中插入节点。0表示向左移动,1表示向右移动。因此,对于011,我们将向左走,向右走,然后向右走...这会将我们带到下一个要插入的位置。

我们每级检查一个节点,使时间复杂度为O(log n)

关于java - 使用二叉树实现堆,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18241192/

10-09 15:51