hola amigos tengo una dudaimportante. Es sobre un metodo de los arboles binarios de busqueda(ABB)
el ejercicio es igual q este pero con la cabecera EliminarTodos, es decir dado un objeto y un nodo una vez encontrado dicho onjeto borre todos los nodos que cuelgan.
Se pide diseñar iterativamente el método de la Clase ArbolBinarioBusqueda que, como se indica en el siguiente perfil, inserta
un cierto Dato clave en un NodoBinario n dado.
protected NodoBinario insertarTodos(Object clave, NodoBinario n){
NodoBinario aux = n, padreAux = null;
int resC = 0;
while ( aux != null ) {
int resC = ((Comparable)aux.dato).compareTo(clave);
numTotalComparaciones++;
padreAux = aux;
if ( resC < 0 ) aux = aux.der; else aux = aux.izq;
}
/** Inserción del Nodo que contiene a clave, que puede ser la Raíz */
NodoBinario nuevo = new NodoBinario(clave);
if ( padreAux == null ) n = nuevo;
else if ( resC < 0 ) padreAux.der = nuevo; else padreAux.izq = nuevo;
numTotalInserciones++;
return n;
}
LA CLASE UTILIZADA ES LA SIGUIENTE
ArbolBinarioBusqueda {
NodoBinario raiz; long numTotalInserciones, numTotalComparaciones;
public ArbolBinarioBusqueda(){
raiz = null; numTotalInserciones = 0; numTotalComparaciones = 0;
}
public boolean esVacio(){return raiz == null;}
public String toString() {
if ( this.raiz != null ) return raiz.imprimirInOrden(); else return "";
}
public String imprimirPorNiveles () {
if ( this.raiz != null ) return raiz.imprimirPorNiveles(); else return "";
}
public int tamanyo() { return NodoBinario.tamanyo(raiz); }
public int altura() { return NodoBinario.altura(raiz);}
public double eMC(){ return ((double)numTotalComparaciones)/numTotalInserciones;}
protected NodoBinario buscar(Object clave, NodoBinario n) throws ElementoNoEncontrado {
if ( n == null ) throw new ElementoNoEncontrado("**al buscar: "+clave+" no está");
int resC = ((Comparable)n.dato).compareTo(clave) ;
if ( resC < 0 ) return buscar( clave, n.der ) ;
else if ( resC > 0 ) return buscar( clave, n.izq ) ;
else return n;
}
protected NodoBinario insertar(Object clave, NodoBinario n) throws ElementoDuplicado {
if ( n == null ) {
numTotalInserciones++; return new NodoBinario(clave);
}
else {
int resC = ((Comparable)n.dato).compareTo(clave) ;
numTotalComparaciones++;
if ( resC < 0 ) n.der = insertar(clave, n.der );
else if ( resC > 0 ) n.izq = insertar(clave, n.izq ) ;
else throw new ElementoDuplicado("**al insertar: "+clave+" ya está");
return n ;
}
}
protected NodoBinario insertarTodos(Object clave, NodoBinario n) {
if ( n == null ) return new NodoBinario(clave);
else{
int resC = ((Comparable)n.dato).compareTo(clave) ;
if ( resC < 0 ) n.der = insertarTodos(clave, n.der );
else n.izq = insertarTodos(clave, n.izq ) ;
return n ;
}
}
protected NodoBinario eliminar(Object clave, NodoBinario n) throws ElementoNoEncontrado {
if ( n == null ) throw new ElementoNoEncontrado("**al eliminar: "+clave+" no está");
int resC = ((Comparable)n.dato).compareTo(clave) ;
if ( resC < 0 ) n.der = eliminar( clave, n.der );
else if ( resC > 0 ) n.izq = eliminar( clave, n.izq ) ;
else if ( n.izq != null && n.der != null ) {
n.dato = buscarMin(n.der).dato; n.der = eliminarMin(n.der);
} else n = ( n.izq != null ) ? n.izq: n.der ;
return n ;
}
protected NodoBinario eliminarMin(NodoBinario n) {
if ( n.izq != null ) n.izq = eliminarMin(n.izq); else n = n.der;
return n;
}
protected NodoBinario buscarMin (NodoBinario n) {
while (n.izq != null) n = n.izq;
return n;
}
URGENTE. Metodo arbolbinariobusqueda
Moderador: Moderadores
lo unico que sé
bueno, como no entiendo eso del ABB, te doy una direccion por si aqui no te pueden ayudar:
aqui todo es programacion:
http://www.lawebdelprogramador.com/
aqui hay info sobre ABB:
http://apuntes.rincondelvago.com/apunte ... formacion/
por cierto ten cuidado con las tildes cuando estas programando
aqui todo es programacion:
http://www.lawebdelprogramador.com/
aqui hay info sobre ABB:
http://apuntes.rincondelvago.com/apunte ... formacion/
por cierto ten cuidado con las tildes cuando estas programando