Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/10/2018, 20:42
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 8 meses
Puntos: 6
Respuesta: Balanceos con Árboles Set

Hola a todos, acá subí los testeos que hice del TreeSet casero, resulta que tengo el siguiente error:

Cita:
java.lang.Exception
at treesetsimple.test.Test.comprobar_que(Test.java:6)
at treesetsimple.test.DownTest.probando_borrado(DownT est.java:36)
at treesetsimple.test.DownTest.test(DownTest.java:44)
at treesetsimple.interfaz.Cuerpo.main(Cuerpo.java:13)
Lo que no me doy cuenta es dónde está la falla del remove de MyTreeMap porque el primer elemento que quiero borrar lo borra pero el siguiente no, sacando el del error funciona bien, en la línea 43 de la clase DownTest.java por alguna razón no me borra Franco:

Código Java:
Ver original
  1. probando_borrado(restart(), new Object[]{"Deborah","Franco","Denisse"});

Este es el remove de MyTreeSet (en las líneas 52, 53 y 54) que delega de MyTreeMap:

Código Java:
Ver original
  1. @Override
  2.     public boolean remove(Object o) {
  3.         return map.remove(o) == PRESENT;
  4.     }

Es el remove de MyTreeMap.java dónde supuestamente estaría el error:

Código Java:
Ver original
  1. @Override
  2.     public V remove(Object key) {
  3.         Entry<K,V> p = getEntry(key);
  4.         if (p == null) {
  5.             return null;
  6.         } else {
  7.             V oldValue = p.value;
  8.             deleteEntry(p);            
  9.             return oldValue;
  10.         }
  11.     }
  12. @Override
  13. private void deleteEntry(Entry<K,V> p) {
  14.         size--;
  15.         Entry<K,V> tmp = new Entry();
  16.         Entry<K,V> y = (leftOf(p) == null || rightOf(p) == null) ? p : higherEntry(p.getKey());
  17.         Entry<K,V> x = (leftOf(y) != null) ? leftOf(y) : (rightOf(y) != null ? rightOf(y) : tmp);        
  18.         x.parent = parentOf(y);
  19.         if (parentOf(y) == null) {
  20.             root = (x == tmp ? null : x);
  21.         } else {
  22.             if (y == leftOf(parentOf(y))) {
  23.                 y.parent.left = (x == tmp) ? null : x;
  24.             } else {
  25.                 y.parent.right = (x == tmp) ? null : x;
  26.             }
  27.         }
  28.         if (y != p){
  29.             p = y;
  30.         }
  31.         if (colorOf(y) == BLACK) {
  32.             fixDown(x);
  33.         }
  34.     }
  35. private void fixDown(Entry<K,V>x){
  36.         while(x != root && colorOf(x) == BLACK) {
  37.             if(x == parentOf(leftOf(x))) {                
  38.                 Entry<K,V> sib = parentOf(rightOf(x));
  39.                 if(colorOf(sib) == RED) {
  40.                     setColor(sib, BLACK);
  41.                     setColor(parentOf(x), RED);
  42.                     rotateLeft(x.parent);
  43.                     sib = parentOf(rightOf(x));
  44.                 }
  45.                 if(colorOf(leftOf(sib)) == BLACK && colorOf(rightOf(sib)) == BLACK) {
  46.                     setColor(sib, RED);
  47.                     x = parentOf(x);
  48.                 } else {
  49.                     if(colorOf(rightOf(sib)) == BLACK) {
  50.                         setColor(leftOf(sib), BLACK);
  51.                         setColor(sib, RED);
  52.                         rotateRight(sib);
  53.                         sib = rightOf(parentOf(x));
  54.                     }
  55.                     setColor(sib, colorOf(parentOf(x)));
  56.                     setColor(parentOf(x), BLACK);
  57.                     setColor(rightOf(sib), BLACK);
  58.                     rotateLeft(x.parent);
  59.                     x = root;
  60.                 }
  61.             } else {
  62.                 Entry<K,V> sib = leftOf(parentOf(x));                
  63.                 if(colorOf(sib) == RED) {
  64.                     setColor(sib, BLACK);
  65.                     setColor(parentOf(x), RED);
  66.                     rotateRight(x.parent);
  67.                     sib = leftOf(parentOf(x));
  68.                 }
  69.                 if(colorOf(rightOf(sib)) == BLACK && colorOf(leftOf(sib)) == BLACK){
  70.                     setColor(sib, RED);
  71.                     x = parentOf(x);
  72.                 } else {                    
  73.                     if(colorOf(leftOf(sib)) == BLACK) {
  74.                         setColor(rightOf(sib), BLACK);
  75.                         setColor(sib, RED);
  76.                         rotateLeft(sib);                        
  77.                         sib = leftOf(parentOf(x));
  78.                     }
  79.                     setColor(sib, colorOf(parentOf(x)));
  80.                     setColor(parentOf(x), BLACK);
  81.                     setColor(leftOf(sib), BLACK);
  82.                     rotateRight(x.parent);
  83.                     x = root;
  84.                 }
  85.             }
  86.         }
  87.         setColor(x, BLACK);
  88.     }

Espero sus respuestas y saludos.
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias