0

Problem desc:

i seem to have a problem with my MIN-heap structure. I get the nullpointer in the min-heapify method in the first if-statement. The test class doesnt matter in this case Can anyone spot the error? Here is the code for the minHeap (Line 31 is the first IF statement in the minHeapify method):

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

0 Answers0