2016-07-15 63 views
0

我想问一下斐波那契堆。 如果我有这样的场景:斐波那契堆中的dequeuemin

A 
| 
B 

然后,我们再增加两个节点C和d:

A 
|\ 
B C 
    | 
    D 

现在我们删除B:

A 
| 
C 
| 
D 

现在我们添加E和F

我看到它创建了一个这样的树:

E 
|\ 
F A 
    | 
    C 
    | 
    D 

但是我不明白为什么E和F连接树。从我读到的内容来看,我们连接相同级别的树(例如,一个节点的树与另一个节点的树),我错了吗?

非常感谢。

回答

0

如果将节点C和D添加到第一个斐波那契堆中,那么最终不会得到您绘制的树。取而代之的是,你有这样的堆:

A C D 
    | 
    B 

记住,斐波那契堆每个新的增值懒洋洋地添加到树的最高级别列表,只合并的事情上删除。如果你要删除B,你将其提升到最高级别,是这样的:

A B C D 

你会再取出B:

A C D 

现在,你会扫描根目录并将相同顺序的树合并在一起。让我们假设你扫描的节点顺序A,C,D。首先,你会合并A和C一起,像这样:

A D 
    | 
    C 

在这一点上,没有进一步的聚结会发生,因为这正是一个每个订单的树。

如果再E和F添加,你把他们在顶层,这样的:

A D E F 
    | 
    C 

所以,是的,你说得对,这些节点不应该被添加到树。