Ayuda en Arboles de Busqueda Binaria

Jose Antonio
09 de Julio del 2004
Necesito ayuda acerca de como implementar un procedimiento enJava, que me elimine un Nodo dado en un Arbol de Busqueda Binaria??? (Sabiendo que El nodo puede no tener hijos, tener Uno, o tener dos claro esta... Muchas Gracias a quien me pueda ayudar, Es Urgente!

astur
09 de Julio del 2004
Utiliza un método recursivo general y otro especifico para cuando tenga dos hijos. Debes tener almacenado(pasaselo como parámetro) una referencia al nodo padre para poder eliminar el nodo.
A grandes rasgos sería algo como
private void eliminar(Nodo actual, Nodo padre, Object elemeto, boolean decho){
if(elemento>actual.elemento) eliminar(actual.dcha, actual, elemento,true)
if(elemento<actual.elemento)eliminar(actual.izqd, actual,elemento,false)
else//aqui tienes q saber si has de eliminar el hijo
izquierdo o derecho y comprobar si tiene dos hijos
if(actual.izq==null)
if(decho)
padre.dch=actua.dch;
else padre.izq=actual.dech
if(actual.dch==null)
if(decho)
padre.dcha=actua.izquierda
else padre.izqd=actua.dcho;
else eliminarConhijos(actua.izqueda, actual);
más o menos a grandes rasgos sería algo así

Jose Antonio
09 de Julio del 2004
Entiendo lo q me quieres decir, pero me encuentro haciendo una clase Nodo extendida de mi clase Arbol, y debo usar el metodo compareTo. No estoy muy diestro aun en el lenguaje, aqui te paso el codigo que llevo de esa clase con la funcion insertar. Ahora deseo eliminar. (vale decir que solo me importa comparar con Elemento1 de mi nodo, ya que este consta de elemento1 y elemento2).

public class Nodo extends Arbol {

protected Comparable info1;
protected Object info2;
protected Arbol hizq;
protected Arbol hder;

public Nodo (Comparable info1, Object info2, Arbol hizq, Arbol hder) {
this.info1 = info1;
this.info2 = info2;
this.hizq = hizq;
this.hder = hder;
}

public String toString () {
String res = "Nodo("+info1+" y "+info2+ ", "+hizq + ", "+hder+")";
return res;
}

public Arbol insertar (Comparable elemento1, Object elemento2 ) {
if (info1.compareTo(elemento1)>0) {
if (!(hizq instanceof Avac)) {
hizq.insertar(elemento1,elemento2);
}
else {
hizq = new Nodo(elemento1,elemento2,new Avac(),new Avac());
}
}
else {
if (!(hder instanceof Avac)) {
hder.insertar(elemento1,elemento2);
}
else {
hder = new Nodo(elemento1,elemento2,new Avac(),new Avac());
}
}
return this;
}
}

Coño Brother mil gracias en lo q me puedas ayudar!!!