2013-07-28 2 views
1

문자열에 힙을 만들고 다양한 기능을 수행하는 일을했습니다. 이제 코드가 제대로 삽입되는지 확인하기 위해 코드를 테스트하고 있습니다. 나는 단어 테스트 해요 :문자열 힙이 제대로 삽입되지 않았습니다.

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; 
} 

:

       Alpha 
      Bravo        Charlie 
    Foxtrot    Delta    Hotel    Echo 
Golf 
다음

내가 작성한 코드입니다 : 내 힙을 인쇄 할 때를 삽입합니다 Golf, Bravo, Hotel, Alpha, Delta, Echo, Charlie, Foxtrot을 알파벳 순으로 그러나 나는 끝낼 편집 : 빠른 검색을 수행하고 힙에 대한 다른 소스 코드를 찾은 후 그것을 테스트하고 동일한 출력을 받았습니다. 이것이 알파벳순으로 추가되지 않는 이유가 있습니까?

답변

1

당신이 당신의 출력에 표시 동작이 분 힙에 대한 올바른은 다음을 참조하십시오

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

를 소개 단락에서 (강조는 추가) : 부모 노드의

하나의 키를 항상 아이들의 그것보다 크거나 같고 가장 높은 키가 루트 노드에있다. (이런 종류의 힙을 최대 힙이라고 부른다) 또는 부모 노드의 키가 자식 노드의 키보다 작거나 같고 가장 낮은 키는 루트 노드에있다. 열쇠가 ro에있다. ot 노드 (min heap). 둘째 단락에서

(강조 추가)

예에있을 것 같은 인 - 오더 순회 형제 또는 사촌 묵시적 서열간에 묵시적인 순서가 (없다 , 이진 탐색 트리). 위에서 언급 한 힙 관계는 노드와 직접적인 부모 사이에만 적용됩니다.

각 노드에는 알파벳순으로 큰 자식 만 있습니다.

관련 문제