0

我正在尝试将 minHeap 类转换为 maxHeap 类。我得到了 minHeap 类的代码,其中一种方法是 add。它看起来像这样:

while (index > 1 && getParent(index).compareTo(newElement) > 0)

第一个节点自动设置为 null,因此添加的所有内容都放在节点 1 以后。如前所述,这段代码给出了一个 minHeap 结构。所以将其更改为 maxHeap,我只是像这样翻转比较器符号:

while (index > 1 && getParent(index).compareTo(newElement) < 0)

我输入的项目由一个整数值存储。按插入顺序,它们是:

3
7
8
10
6
1
9
2

在 minHeap 结构中,这些存储在节点中,如下所示:

            1
       2         3
    6     7   8     9
 10

在 maxHeap 结构中,更改符号会像这样存储它们:

           10
      8           9
   2     7     3     6
 1

请注意,它们的顺序不再与 minHeap 结构中的顺序相同。这很重要还是仍然是有效的 maxHeap?

为我展示树状结构的糟糕尝试道歉。

4

1 回答 1

0

是的。如果您的堆按您所说的那样存储,那么它是有效的最大堆。Max-Heap 具有每个节点(根节点除外)包含小于或等于其父节点的值的属性。你的堆遵守这条规则。

于 2013-03-24T23:31:36.533 回答