Я пытаюсь удалить (Comparable e) объект, скажем, удалить (2), но когда я пытаюсь удалить его, он удаляет неправильный узел в куче, а не тот, который я хочу удалить.
Вот так выглядит вывод.
Куча перед удалением Redwoods NP:
Bryce Canyon NP Redwoods NP Joshua Tree NP Zion NP Yosemite NP Lassen Volcanic NP
[
null,
Bryce Canyon NP,
Redwoods NP,
Joshua Tree NP,
Zion NP,
Yosemite NP,
Lassen Volcanic NP
]
После удаления Redwoods NP:
Bryce Canyon NP Redwoods NP Joshua Tree NP Zion NP Redwoods NP
[
null,
Bryce Canyon NP,
Redwoods NP,
Joshua Tree NP,
Zion NP,
Redwoods NP,
Lassen Volcanic NP
]
BUILD SUCCESSFUL (total time: 1 second)
Ожидаемое
[
Bryce Canyon NP,
Joshua Tree NP,
Zion NP,
Yosemite NP,
Lassen Volcanic NP
]
Мой код
public void remove(Comparable e) throws NoSuchElementException {
if (size == 0) {
throw new NoSuchElementException("Heap is empty! Nothing to be removed");
}
Comparable toRemove = e;
System.out.println(Arrays.toString(heapData));
Comparable temp = heapData[size-1];
heapData[size-1] = toRemove;
toRemove = temp;
size--;
maxHeapify(heapData,size);
}
Метод My Add (Comparable e) кода
public void add(Comparable e) {
if (size == heapData.length - 1) {
doubleSize();
}
int position = ++size;
for (; position > 1 && e.compareTo(heapData[position / 2]) < 0; position = position / 2) {
heapData[position] = heapData[position / 2];
maxHeapify(heapData, position);
}
heapData[position] = e;
}