有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

堆移除和重建方法?(爪哇)

我的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) 个答案