Метод Minheapify - PullRequest
       51

Метод Minheapify

0 голосов
/ 15 марта 2019

Problem desc:

Кажется, у меня проблема с моей структурой MIN-heap.Я получаю нулевой указатель в методе min-heapify в первом операторе if.Тестовый класс не имеет значения в этом случае Может кто-нибудь заметить ошибку?Вот код для minHeap (строка 31 является первым оператором IF в методе minHeapify):

public class PQHeap implements PQ {

    private PriorityQueue pq;
    private Element[] heapArray;
    private int heapSize;

    public PQHeap(int maxElms) {
        pq = new PriorityQueue(maxElms);
        heapArray = new Element[maxElms];
        heapSize = 0;
    }

    public void minHeapify(int index) {
        int left = getLeft(index);
        int right = getRight(index);
        int smallest = index;
        if (left < heapSize && heapArray[left].getKey() < heapArray[index].getKey()) {
            smallest = left;
        }
        if (right < heapSize && heapArray[right].getKey() < heapArray[smallest].getKey()) {
            smallest = right;
        }
        if (smallest != index) {
            exchangeKey(heapArray[index].getKey(), heapArray[smallest].getKey());
            minHeapify(smallest);
        }
    }

    public int getLeft(int index) {
        return index * 2;
    }

    public int getRight(int index) {
        return index * 2 + 1;
    }

    public int getParent(int index) {
        return index / 2;
    }

    public void exchangeKey(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
    }

    @Override
    public Element extractMin() {
        Element min = heapArray[0];
        heapArray[0] = heapArray[heapArray.length - 1];
        minHeapify(0);
        return min;
    }

    @Override
    public void insert(Element e) {
        heapSize++;
        int i = heapSize;
        heapArray[i] = e;

        while (i > 1 && heapArray[getParent(i)].getKey() > heapArray[i].getKey()) {
            exchangeKey(heapArray[i].getKey(), getParent(heapArray[i].getKey()));
            i = getParent(i);
        }
    }
//SKAL FJERNES
    public void print() {
        for (int i = 1; i <= heapSize / 2; i++) {
            System.out.print(" PARENT : " + heapArray[i].getKey()
                    + " LEFT CHILD : " + heapArray[2 * i].getKey()
                    + " RIGHT CHILD :" + heapArray[2 * i + 1].getKey());
            System.out.println();
        }
    }

    //SKAL FJERNES
    public void minHeap() {
        for (int pos = (heapSize / 2); pos >= 1; pos--) {
            minHeapify(pos);
        }
    }
}
...