Árboles
DESCRIPTION
ÁRBOLES. Definición. Nodo base: raíz del árbol. Estructura de datos jerárquica (no lineal) que puede representarse como un conjunto de nodos enlazados entre sí por medio de ramas . Formalmente, un árbol es una estructura da datos que cumple una de las siguientes condiciones: - PowerPoint PPT PresentationTRANSCRIPT
ÁRBOLES
DefiniciónEstructura de datos
jerárquica (no lineal) que puede representarse como un conjunto de nodos enlazados entre sí por medio de ramas.
Formalmente, un árbol es una estructura da datos que cumple una de las siguientes condiciones:Estructura vacíaNodo de tipo base que tiene
de 0 a N subárboles disjuntos entre sí.
1
3
4
57
9
29 44
17
69
Nodo base: raíz del árbol
ÁRBOLES BINARIOS
Definición.Árbol de grado 2Implementación física:
Estructura estática (matrices)Estructura dinámica
Los nodos de un árbol tienen (al menos) tres componentes:Clave (de tipo simple o estructurada)Puntero que indique la ubicación del árbol derechoPuntero que indique la ubicación del árbol izquierdo
Además: convención para indicar que no tiene hijos (valor null)
0 1 2 3 4 5clave 1 7 3 4 9 17Ar.Iz 1 3 5 * * *Ar.De 2 4 * * * *
1
37
4 9 17
arbol Memoria estática
Memoria dinámica
1
7
3 *
4 * * 9 * *
17 * *
nombre
raiz
Arbol
NodoArbol
Definición de las clasesClase Arbol
public class Arbol {String nombre;NodoArbol raiz;
public Arbol () {nombre = null;raiz = null;
}}
Clase NodoArbolpublic class NodoArbol {
int clave;NodoArbol iz;NodoArbol de;
public NodoArbol () { clave = 0;
iz = null;de = null;
} }
Aplicado a objetos de la clase Arbol:// Escribe las claves del árbol binario en preorden.static void preOrden (NodoArbol arbol) {
if (arbol != null) {System.out.print (arbol.clave+" ") ; preOrden (arbol.iz); preOrden (arbol.de);
}}public void preorden () {
preorden (raiz);}Orden de visita de nodos:
1, 2, 4, 9, 15, 5, 3, 8 y 7.
Preferido para:Búsquedas.
Recorrido en Preorden.
1
3
4
2
5 8 7
9 15
arbol nombre
raiz
Aplicado a objetos de la clase Arbol: // Escribe las claves del árbol binario en orden central.
static void ordenCentral (NodoArbol arbol) {if (arbol != null) {
ordenCentral (arbol.iz);System.out.print (arbol.clave+" ");ordenCentral (arbol.de);
}}public void ordenCentral () {
ordenCentral (raiz);}
Orden de visita de nodos: 9, 4, 15, 2, 5, 1, 8, 3 y 7.
Preferido para:Recorrido de acuerdo al orden físico de los nodos.En árboles binarios de búsqueda recupera la
secuencia.
arbolnombre
raiz
Recorrido en Orden Central
1
3
4
2
5 8 7
9 15
Aplicado a objetos de la clase Arbol: // Escribe las claves del árbol binario en postorden.static void postOrden (NodoArbol arbol) {
if (arbol != null) {postOrden (arbol.iz);postOrden (arbol.de);System.out.print (arbol.clave + " ") ;
}}public void postOrden () {
postOrden (raiz);}
Orden de visita de nodos: 9, 15, 4, 5, 2, 8, 7, 3 y 1.
Preferido para:Liberar memoria.Nodos buscados en los niveles
más bajos del árbol.
Recorrido en Postorden
1
3
4
2
5 8 7
9 15
arbol nombre
raiz
Árbol sobre Matriz: clases.Clase
NodoArbolClase Arbol
class NodoArbol {int clave, izq, der;NodoArbol () {
clave = 0;izq = -1;der = -1;
}}
public class ArbolMatriz {final int NULL = -1, N = 10;NodoArbol [ ] matriz;int numNodos;ArbolMatriz () {
matriz = new NodoArbol [N];for (int i = 0; i < N; i++)
matriz [i] = new NodoArbol ();numNodos = 0;
}
Árbol sobre Matriz: representación.
0 1 2 3 4 5 6 7 8 9
Clave 10 20 5 15 45 25 0 0 0 0
Hijo izquierdo 2 3 -1 -1 5 -1 -1 -1 -1 -1
Hijo derecho 1 4 -1 -1 -1 -1 -1 -1 -1 -1
Árbol sobre Matriz: recorridos en profundidad.Preorden Orden central
private void preOrden (int i) {if (i != NULL) {
System.out.print (matriz [i].clave+", ");preOrden (matriz [i].izq);preOrden (matriz [i].0der);
}}public void preOrden () {
preOrdenAux (0);}
private void ordenCentralAux (int i) {if (i != NULL) {
ordenCentralAux (matriz [i].izq);System.out.print (matriz [i].clave+", ");ordenCentralAux (matriz [i].der);
}}public void ordenCentral () {
ordenCentralAux (0);}
Postordenprivate void postOrdenAux (int i) {
if (i != NULL) {postOrdenAux (matriz [i].izq);postOrdenAux (matriz [i].der);System.out.print (matriz [i].clave+", ");
}}public void postOrden () {
postOrdenAux (0);}