Árboles

12
ÁRBOLES

Upload: cael

Post on 23-Feb-2016

56 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: ÁRBOLES

ÁRBOLES

Page 2: Á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

Page 3: ÁRBOLES

ÁRBOLES BINARIOS

Page 4: ÁRBOLES

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)

Page 5: ÁRBOLES

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

Page 6: ÁRBOLES

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;

} }

Page 7: ÁRBOLES

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

Page 8: ÁRBOLES

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

Page 9: ÁRBOLES

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

Page 10: ÁRBOLES

Á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;

}

Page 11: ÁRBOLES

Á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

Page 12: ÁRBOLES

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