Árboles n-Arios
Elsa Olivares
Camilo Camargo
Pedro Jaraba
Programación IV
UAC
Generalización
Estructura recursiva en la que cada elemento tiene n árboles n arios asociados.


Conceptos compartidos
Nodo: Elemento del árbol
Raíz: Nodo inicial del árbol
Hoja: Nodo sin hijos
Camino: Todos los nodos entre dos elementos (incluyéndolos)
Rama: Camino entre raíz y una hoja
Altura: Número de nodos en la rama más larga.
Peso: Número de nodos en el árbol
Orden: Número máximo de subarboles asociados.
Ejemplo:

Arbol orden 4
Altura: 4
Peso: 13
Inorden: b, a, e, c, f, j, g, k, l, m, d, h, i
Postorden: b, e, f, c, j, k, l, m, g, h, i, d, a
Preorden: a, b, c, e, f, d, g, j, k, l, m, h, i
Algorítmica
Primer nivel:
- Es el árbol vacío?
- Crea estructura de datos como iterador.
Segundo nivel:
- Planteamiento recursivo
- Se tienen n avances en la recursión.
- Se requiere un ciclo para iterar sobre cada avance.
Implementación
Tad ArbN<E>{ E obtener(); void setDato(E x); List<ArbN<E>> darHijos(); void enlazar(ArbN<E> x); boolean esHoja(); }
Ejemplo
public class ArbNEntero implements ArbN<E>{ //**Atributos** private Integer dato; private List<ArbN<Integer >> hijos; //**Constructor** public ArbNEntero(Integer x) { dato = x; hijos = new ArrayList<<>>(); } //**Metodos interesantes, el resto omitidos** public void enlazar(ArbN<Integer> r) { hijos.add(r); } public boolean esHoja() { if(hijos.size() == 0) return true; else return false; } }
Ejemplo Creación

Crear
//*Metodo crear*public ArbN<Integer> crear(){ArbN<Integer> raiz = new ArbNEntero<>(1);ArbN<Integer> a10 = new ArbNEntero<>(10);ArbN<Integer> a20 = new ArbNEntero<>(20);ArbN<Integer> a30 = new ArbNEntero<>(30);ArbN<Integer> a11 = new ArbNEntero<>(11);ArbN<Integer> a14 = new ArbNEntero<>(14);ArbN<Integer> a17 = new ArbNEntero<>(17);ArbN<Integer> a33 = new ArbNEntero<>(33);ArbN<Integer> a39 = new ArbNEntero<>(39);//**Continua siguiente diapositiva**//
Continuación crear
raiz.enlazar(a10);raiz.enlazar(a20);raiz.enlazar(a30);a10.enlazar(a11);a10.enlazar(a14);a10.enlazar(a17);a30.enlazar(a33);a30.enlazar(a39);}
Recorrido Preorden
public void impPreorden(ArbN<Integer> r){if(r!=null){System.out.println(""+ r.darElemento());for(int i=0;i<r.darHijos().size();i++){ArbN<Integer> hijo = r.darHijos().get(i);impPreorden(hijo);}}}
Recorrido Postorden
public void impPostorden(ArbN<Integer> r){if(r!=null){
for(int i=0;i<r.darHijos().size();i++){ArbN<Integer> hijo = r.darHijos().get(i);impPostorden(hijo);}System.out.println(""+ r.darElemento());
}}
public void impPostorden(ArbN<Integer> r){if(r!=null){for(int i=0;i<r.darHijos().size();i++){ArbN<Integer> hijo = r.darHijos().get(i);impPostorden(hijo);}System.out.println(""+ r.darElemento());}}
Recorrido Inorden
public void impInorden(ArbN<Integer> r){if(r!=null){impInorden(r.darHijos().get(0));System.out.println(""+ r.darElemento());
for(int i=1;i<r.darHijos().size();i++){ArbN<Integer> hijo = r.darHijos().get(i);impPostorden(hijo);}}}
public void impInorden(ArbN<Integer> r){if(r!=null){impInorden(r.darHijos().get(0));System.out.println(""+ r.darElemento());for(int i=1;i<r.darHijos().size();i++){ArbN<Integer> hijo = r.darHijos().get(i);impPostorden(hijo);}}}
Altura
public int darAltura(ArbN<Integer> r){if(r!=null)return r.darAltura();elsereturn 0;}//*Método polimórfico siguiente diapositiva*
Continuación Altura
public int darAltura(ArbN<Integer> r){if(r.esHoja())return 1;else{int maxAltura = 0;for(int i=0;i<r.darHijos().size();i++){ArbN<Integer> hijo = r.darHijos().get(i);int aux = hijo.darAltura();if(aux > maxAltura)maxAltura = aux;}return maxAltura + 1;}}
Bibliografía
http://cupi2.uniandes.edu.co/sitio/images/cursosCupi2/datos/presentaciones/n16_arbolesnarios.pdf
http://www.it.uc3m.es/java/prog/units/arboles/guides/2/guide_es_solution.html
Árboles n-Arios
By Pedro Jaraba
Árboles n-Arios
- 1,563