我想问一下Fibonacci堆。 如果我有这种情况:
A
|
B
然后,我们再添加两个节点C和D:
A
|\
B C
|
D
现在我们删除B:
A
|
C
|
D
现在我们添加E和F.
我看到它创建了一个这样的树:
E
|\
F A
|
C
|
D
但是我不明白为什么E和F与树连接。从我读到的,我们连接相同等级的树(例如,一个节点的树与一个节点的另一棵树),我错了吗?
非常感谢。
答案 0 :(得分:0)
如果将节点C和D添加到第一个Fibonacci堆中,则不会得到您绘制的树。相反,你有这个堆:
A C D
|
B
请记住,Fibonacci会懒洋洋地将每个新添加的值添加到顶级树列表中,并且仅在删除时合并内容。如果您要删除B,则将其提升到顶级,如下所示:
A B C D
然后删除B:
A C D
现在,您将扫描根列表并将同一订单的树合并在一起。我们假设您按照A,C,D的顺序扫描节点。首先,您将A和C合并在一起,如下所示:
A D
|
C
此时,不会再发生合并,因为每个订单中只有一棵树。
如果你再添加E和F,你就把它们放在顶层,如下所示:
A D E F
|
C
所以是的,你是对的,这些节点不应该被添加到树中。