【发布时间】:2011-07-27 23:25:25
【问题描述】:
所以我正在尝试实现二进制最小堆。我了解二进制最小堆在其结构和属性方面的含义。但是,当我尝试使用指针和节点来实现它时,我碰壁了。
我使用的是Node,它有right/left and pointers、int element 和parent pointer。我还有一个LastNode,它指向最后插入的节点。
我的争吵是我不知道插入元素时要做什么,就最后一个节点而言。 这就是我的意思。
步骤 1.) 假设堆是空的,所以你创建一个 root 即 x 其中 x 包含元素并且你设置 root.left/right = null 和 LastNode = root.left。
X
/ \
0 0
这是我卡住的部分。我知道当您创建另一个节点来存储另一个元素时,它将位于 X 的左侧或 LastNode 指向的位置。我的问题我接下来用 LastNode 做什么,我是否将它指向 x.right ?我试图让insert(int x) 在 logN 中运行,并且 lastNode 操作将在每个级别变得更长和更广泛。
有人可以分解吗? 谢谢
【问题讨论】:
-
如果这不是功课,那么二进制堆有一个更简单的实现:只需使用一个数组
-
如果一个节点有左、右和父指针,它就不是一个LinkedList,它是一个树。
-
是的,使用数组要容易得多,但这是功课。
标签: java binary-tree heap min