我是否正确插入最大堆?

时间:2013-08-06 22:45:00

标签: data-structures tree

我正在为我的决赛学习,我不确定我是否正确插入了值6, 7, 57, 54, 96, 3, 9, 4, 2, 8, 32。我最终看到了一棵树:

                                     96
                                   /    \
                                  57     9
                                 /  \   / \
                                6   54 3   7
                               / \  / \
                               4 2 8   32

任何人都可以告诉我这是否正确,或者是否指出我搞砸了哪里?谢谢!

2 个答案:

答案 0 :(得分:2)

这是对的。为什么你认为你搞砸了?

答案 1 :(得分:1)

是的,您的解决方案是正确的

只要在表示二进制堆的列表末尾添加新元素,然后对该元素应用heapify。

Heapify应该将元素与其'进行比较。如果它更大,它应该交换这些元素并继续运行直到你到达根目录。

这里有一些阶段:

6       -->              7       -->    57
                        /              /  \
                       6              6    7 

这是一个java示例:

public class BinaryMinHeap {



    public void insert(int value) {
                if (heapSize == data.length)
                      throw new HeapException("Heap's underlying storage is overflow");
                else {
                      heapSize++;
                      data[heapSize - 1] = value;
                      heapify(heapSize - 1);
                }
          }    

          …

    private void heapify(int nodeIndex) {
                int parentIndex, tmp;
                if (nodeIndex != 0) {
                      parentIndex = getParentIndex(nodeIndex);
                      if (data[parentIndex] < data[nodeIndex]) {
                            tmp = data[parentIndex];
                            data[parentIndex] = data[nodeIndex];
                            data[nodeIndex] = tmp;
                            heapify(parentIndex);
                      }
                }
          }
    }

代码来源:here