Вы должны посчитать своп как в методе add(T newEntry)
, так и в методе reHeap
, который вызывается из removeMax
mathod.
В reHeap
вы начинаете сверху и по мере его вызоваиз removeMax, где после удаления max (в случае Max Heap) вы заменяете корень последним элементом, а затем вам необходимо сбалансировать кучу.Таким образом, куча рекурсивно снижается до последнего уровня для балансировки, что может потребовать подкачки.
РЕДАКТИРОВАТЬ:
Добавить подкачку внутри следующего блока кода reHeap
:
if (orphan.compareTo(heap[largerChildIndex]) < 0) {
heap[rootIndex] = heap[largerChildIndex];
rootIndex = largerChildIndex;
leftChildIndex = 2 * rootIndex;
// increment the swap here as inside this block of reHeap only swap takes place.
swap++
}