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 originalprobando_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@Override
public boolean remove
(Object o
) { return map.remove(o) == PRESENT;
}
Es el remove de MyTreeMap.java dónde supuestamente estaría el error:
Código Java:
Ver original@Override
Entry<K,V> p = getEntry(key);
if (p == null) {
return null;
} else {
V oldValue = p.value;
deleteEntry(p);
return oldValue;
}
}
@Override
private void deleteEntry(Entry<K,V> p) {
size--;
Entry<K,V> tmp = new Entry();
Entry<K,V> y = (leftOf(p) == null || rightOf(p) == null) ? p : higherEntry(p.getKey());
Entry<K,V> x = (leftOf(y) != null) ? leftOf(y) : (rightOf(y) != null ? rightOf(y) : tmp);
x.parent = parentOf(y);
if (parentOf(y) == null) {
root = (x == tmp ? null : x);
} else {
if (y == leftOf(parentOf(y))) {
y.parent.left = (x == tmp) ? null : x;
} else {
y.parent.right = (x == tmp) ? null : x;
}
}
if (y != p){
p = y;
}
if (colorOf(y) == BLACK) {
fixDown(x);
}
}
private void fixDown(Entry<K,V>x){
while(x != root && colorOf(x) == BLACK) {
if(x == parentOf(leftOf(x))) {
Entry<K,V> sib = parentOf(rightOf(x));
if(colorOf(sib) == RED) {
setColor(sib, BLACK);
setColor(parentOf(x), RED);
rotateLeft(x.parent);
sib = parentOf(rightOf(x));
}
if(colorOf(leftOf(sib)) == BLACK && colorOf(rightOf(sib)) == BLACK) {
setColor(sib, RED);
x = parentOf(x);
} else {
if(colorOf(rightOf(sib)) == BLACK) {
setColor(leftOf(sib), BLACK);
setColor(sib, RED);
rotateRight(sib);
sib = rightOf(parentOf(x));
}
setColor(sib, colorOf(parentOf(x)));
setColor(parentOf(x), BLACK);
setColor(rightOf(sib), BLACK);
rotateLeft(x.parent);
x = root;
}
} else {
Entry<K,V> sib = leftOf(parentOf(x));
if(colorOf(sib) == RED) {
setColor(sib, BLACK);
setColor(parentOf(x), RED);
rotateRight(x.parent);
sib = leftOf(parentOf(x));
}
if(colorOf(rightOf(sib)) == BLACK && colorOf(leftOf(sib)) == BLACK){
setColor(sib, RED);
x = parentOf(x);
} else {
if(colorOf(leftOf(sib)) == BLACK) {
setColor(rightOf(sib), BLACK);
setColor(sib, RED);
rotateLeft(sib);
sib = leftOf(parentOf(x));
}
setColor(sib, colorOf(parentOf(x)));
setColor(parentOf(x), BLACK);
setColor(leftOf(sib), BLACK);
rotateRight(x.parent);
x = root;
}
}
}
setColor(x, BLACK);
}
Espero sus respuestas y saludos.