Á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());
}}

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);}}}

Altura

 public int darAltura(ArbN<Integer> r){if(r!=null) return r.darAltura();else return 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://cupi2.uniandes.edu.co/libros/estructuras_de_datos/index.php?option=com_content&view=article&id=248&Itemid=241


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,526