Definiciones y ejercicios

Anuncio
EDA
2004/2005
Árboles
árbol = nodos (raíz, hojas) + aristas
longitud del camino (único) raíz - nodo:
# aristas
profundidad de un nodo:
longitud del camino raíz – nodo
altura de un nodo: longitud del
camino nodo – hoja más profunda
(altura árbol=altura raíz)
a
b
e
c
d
f
tamaño de un nodo: # descendientes
que tiene, él inclusive
(tamaño árbol=tamaño raíz)
g
h
Paolo Rosso Grupos: 2H+ENG - ETSIA
EDA
2004/2005
Árbol binario
a
cada nodo max 2 hijos (izq, der)
nivel i: # max nodos 2i
b
c
altura h: # max nodos 2h+1-1
árbol binario lleno
e
d
f
g
árbol binario completo
Paolo Rosso Grupos: 2H+ENG - ETSIA
EDA
2004/2005
Nodo binario
d
operaciones de recorrido:
• recorrido en amplitud (por niveles),
iterativo: recorrer nivel a nivel, de izq a der
abcdefg
• recorrido en profundidad,
a recursivo: recorrer “bajando” en el árbol
PreOrden: raí z,hijoIzq,hijoDer
abdcegf
b
c
PostOrden: hijoIzq,hijoDer,raí z
dbgefca
e
f InOrden: hijoIzq,raí z,hijoDer
dbaegcf
g
Paolo Rosso Grupos: 2H+ENG - ETSIA
1
EDA
2004/2005
Ejercicio 1
enQueNivel (Objectx) ?
Paolo Rosso Grupos: 2H+ENG - ETSIA
EDA
2004/2005
Ejercicio 1
int enQueNivel(Object x) { // en NodoBinariollamada
int res;
// desde ArbolBinario
i f ( this.dato.equals(x) ) res = 0;
else {
res = -1;
i f ( this.izq != null ) res = this.izq.enQueNivel(x);
i f ( res == -1 && this.der != null) res=this.der.enQueNivel(x);
// si no está, res == -1; si ésta, se ha explorado un nivel más
i f ( res != -1 ) res++;
}
return res;
}
Paolo Rosso Grupos: 2H+ENG - ETSIA
EDA
2004/2005
Ejercicio 2
imprimirNivel (int k) ?
Paolo Rosso Grupos: 2H+ENG - ETSIA
2
EDA
2004/2005
Ejercicio 2
// 0<=k<=altura()
String imprimirNivel(int k) {
String res;
i f ( k == 0 ) res = this.dato.toString()+" "; else {
res = "";
i f( this.izq != null ) res += this.izq.imprimirNivel(k-1);
i f( this.der != null ) res += this.der.imprimirNivel(k-1);
}
return res;
}
Paolo Rosso Grupos: 2H+ENG - ETSIA
EDA
2004/2005
Prueba Árbol binario
public class PruebaArbolBinario {
static public void main( String [ ] args ) throws UnionNoPermitida {
ArbolBinario t1 = new ArbolBinario(new Integer (1));
ArbolBinario t3 = new ArbolBinario(new Integer (3));
ArbolBinario t5 = new ArbolBinario(new Integer (5));
ArbolBinario t7 = new ArbolBinario(new Integer (7));
ArbolBinario t2 = new ArbolBinario();
ArbolBinario t4 = new ArbolBinario();
ArbolBinario t6 = new ArbolBinario();
t2.unir(new Integer (2),t1,t3);
System.out.println("t2, unión de raiz =2,t1=1 y t3=3,recorrido In-Orden");
// Combrobar en laboratorio si imprimirInOrden() “imprime”. En caso
// contrario habrá que hacerlo …
t2.imprimirInOrden();
Paolo Rosso Grupos: 2H+ENG - ETSIA
EDA
2004/2005
Prueba Árbol binario
System.out.println("Tras la unión, t1 recorrido In-Orden");
t1.imprimirInOrden();
System.out.println("Tras la unión, t3 recorrido In-Orden");
t3.imprimirInOrden();
t6.unir(new Integer (6),t5,t7);
System.out.println("t6, unión de raiz =6, t5=5 y t7=7, recorrido In-Orden");
t6.imprimirInOrden();
t4.unir(new Integer (4),t2,t6);
System.out.println("t4, unión de raiz =4, t2 y t6 , recorrido In-Orden");
t4.imprimirInOrden();
System.out.println("Tamaño de t4: "+t4.tamanyo());
System.out.println("Altura de t4: "+t4.altura());
System.out.println("Dato raiz de t4: "+t4.raiz.dato);
Paolo Rosso Grupos: 2H+ENG - ETSIA
3
EDA
2004/2005
Prueba Árbol binario
System.out.print("Búsqueda del nivel en el que se encuentra un elemento");
input teclado = new input();
int leido = leerEntero(teclado);
Integer objLeido = new Integer(leido) ;
int nivelNodo = t4.enQueNivel(objLeido) ;
if ( nivelNodo == -1) System.out.println(objLeido+" no es un elemento de
este árbol binario");
else System.out.println(objLeido+" está en el nivel "+ nivelNodo);
System.out.print("Imprimir los elementos de un nivel dado");
teclado = new input();
leido = leerEntero(teclado) ;
if ( leido < 0 && leido > t4.altura()) System.out.println(leido+" no es un nivel
de este árbol binario");
else System.out.println("Los nodos de este nivel son: “
Paolo
Rosso
Grupos: 2H+ENG - ETSIA
+t4.imprimirNivel(leido));
EDA
2004/2005
Prueba Árbol binario
System.out.println("t4, recorrido Post-Orden");
t4.imprimirPostOrden();
System.out.println("t4, recorrido Pre-Orden");
t4.imprimirPreOrden();
System.out.println("t4, recorrido Por Niveles");
t4.imprimirPorNiveles();
ArbolBinario duplicadoDeT4 = new ArbolBinario();
duplicadoDeT4 .duplicar(t4);
System.out.println("DuplicadoDeT4 , recorrido InOrden");
duplicadoDeT4 .imprimirInOrden();
} // main
Paolo Rosso Grupos: 2H+ENG - ETSIA
EDA
2004/2005
Prueba Árbol binario
private static int leerEntero(input teclado) {
boolean hayerror = true ;
int num = 0;
do {
try {
System.out.print( "\nIntroduzca un valor entero: ");
num = Integer.parseInt(teclado.readline());
hayerror=false ;
}
catch ( NumberFormatException eUnchecked ){
System.out.println("Atento: no has tecleado un entero");
}
} while (hayerror);
return num;
} // leerEntero
Paolo Rosso Grupos: 2H+ENG - ETSIA
} // PruebaArbolBinario
4
Descargar