Что-то не так с моим методом удаления или перестроения, когда я сначала удаляю наименьшее число, а затем максимальное число попадает в начало очереди.Это куча с использованием списка массивов.
public E remove() throws HeapException {
E root = tree.get(0);
tree.set(0, tree.get(tree.size() - 1));
currentObjCount = tree.size() - 1;
tree.remove(tree.size() - 1);
rebuild(0, currentObjCount);
return root;
}
private void swap(int place, int parent) {
E tmp = tree.get(pos);
tree.set(place, tree.get(parent));
tree.set(parent, tmp);
}
private void rebuild(int root, int eSize) {
eSize = tree.size();
if (root * 2 > eSize && root * 2 + 1 > eSize) {
child = 2 * root + 1;
if (root * 2 + 1 <= eSize) {
if (tree.get(child + 1).compareTo(tree.get(child)) > 0) {
child++;
}
if (tree.get(root).compareTo(tree.get(child)) < 0) {
swap(root, child);
rebuild(child, eSize);
}
}
Мой вывод:
Inserting
8
-4 8
-4 8 8
-4 -1 8 8
-4 -1 8 8 8
-10 -1 -4 8 8 8
Removing
8 -1 -4 8 8
8 -1 -4 8
8 -1 -4
-4 -1
-1
Я думаю, что это метод перестройки.Вероятно, это признаки сравнения, но если это так, я не знаю, какие из них.