字符串堆未正确插入

时间:2013-07-28 23:22:15

标签: java data-structures

我一直致力于创建一个字符串堆,并在其上执行各种功能。我现在正在测试我的代码以查看它是否正确插入,而事实并非如此。我正在测试单词Golf, Bravo, Hotel, Alpha, Delta, Echo, Charlie, Foxtrot,它会按字母顺序插入它们,但是当我打印我的堆时,我最终得到:

                                Alpha
             Bravo                              Charlie
   Foxtrot              Delta              Hotel              Echo
Golf

这是我写的代码:

public boolean insert(String key) {
    if(currentSize == maxSize) {
        return false;
    }

    Node newNode = new Node(key);
    heapArray[currentSize] = newNode;
    trickleUp(currentSize++);
    return true;
}

public void trickleUp(int index) {
    int parent = (index - 1) / 2;
    Node bottom = heapArray[index];

    while(index > 0 && heapArray[parent].getKey().compareTo(bottom.getKey()) > 0) {
        heapArray[index] = heapArray[parent];
        index = parent;
        parent = (parent - 1) / 2;
    }
    heapArray[index] = bottom;
}
编辑:在快速搜索并找到Heap的另一个源代码并对其进行测试后,我获得了相同的输出。有没有理由不按字母顺序添加?

1 个答案:

答案 0 :(得分:1)

您在打印输出中显示的行为对于最小堆是正确的,请参阅:

http://en.wikipedia.org/wiki/Heap_(data_structure)

从介绍性段落(重点补充):

  

父节点的密钥总是大于或等于子节点的密钥,最高密钥在根节点中(这种堆称为最大堆)或父节点的密钥少小于或等于子节点,最低键位于根节点(最小堆)。

从第二段开始(重点补充):

  

兄弟姐妹或堂兄弟之间没有隐含的排序,并且没有隐含序列用于有序遍历(如在二进制搜索树中那样)。上面提到的堆关系仅适用于节点及其直接父节点之间。

您的堆看起来是正确排序的,因为每个节点只有按字母顺序排列的子节点大于它。