Метод удаления и восстановления кучи?(Джава) - PullRequest
0 голосов
/ 23 сентября 2018

Что-то не так с моим методом удаления или перестроения, когда я сначала удаляю наименьшее число, а затем максимальное число попадает в начало очереди.Это куча с использованием списка массивов.

   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 

Я думаю, что это метод перестройки.Вероятно, это признаки сравнения, но если это так, я не знаю, какие из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...