堆删除和重建方法? (Java)

时间:2018-09-23 20:05:51

标签: java heap

我的remove或rebuild方法出了点问题,当我第一次删除最低的数字时,最大的数字就移到了队列的最前面。它是使用数组列表的堆。

   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 

我认为这是重建方法。它可能是比较符号,但如果是,我不知道是哪个符号。

0 个答案:

没有答案