Java - duda sobre arbolbinario

 
Vista:

duda sobre arbolbinario

Publicado por nyarko (1 intervención) el 27/08/2005 15:44:43
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˜nar iterativamente el m´etodo 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´on del Nodo que contiene a clave, que puede ser la Ra´iz */
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´a");
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´a");
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´a");
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;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder