Arboles

April 13, 2023 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download Arboles...

Description

 

Árboles Contenido: • Definición de árbol • Conceptos básicos • Árboles binarios • Recorrido de árboles

 

Árboles ¿Qué es un árbol? •

Un árbol es una estructura de datos formada por nodos los cuales están conectados por aristas  

nodos

. aristas

A

B

C

E

 

 

D

F G

H

 

I

 

Árboles Conceptos Básicos • Un árbol puede estar vacío; es decir no contener ningún nodo. • Hablaremos entonces del Árbol Vacío. Vacío. • Raíz: es el nodo que está al tope del árbol. árbol. Un árbol solo tiene una

raíz. Raiz A

B

 

C

E

 

F

D

G

 

H

 

I

 

Árboles Conceptos Básicos • Camino: es la secuencia de nodos que hay que visitar para llegar

de un nodo a otro de un árbol. Ejemplo: B-A-C-F es el camino entre B y F.

A

B

 

C

E

 

F

D

G

 

H

 

I

 

Árboles Conceptos Básicos • Un conjunto de nodos y aristas se define como un árbol si y solo si

existe un único camino desde la raiz hasta cada uno de sus nodos. A

B

Esto no es un arbol, porque existe mas de un camino desde la raiz para llegar a algunos nodos

 

C

E

 

D

F G

 

H

 

I

 

Árboles Conceptos Básicos • Padre: En un árbol toda rama va de un nodo n1 a un nodo n2, se

dice que n1 es padre de n2. Ejemplo: C es padre de E y de F, D es padre de G, de H y de I. • Hijo: todo nodo puede tener mas de una arista que lo lleva a otro

nodo por debajo de él. Estos nodos que se encuentran por debajo de un nodo dado se llaman hijos. Ejemplo: E es hijo de C, B es hijo de  A, H es hijo de D A B Hijos

Padres

 

C E

 

F

D G   H   I

 

Árboles Conceptos Básicos • Hojas: son aquellos nodos que no tienen hijos. En un arbol solo

puede haber una raíz pero pero pueden haber muchas hojas. Ejemplo: B,E,F,G,H,I son hojas. • Subárbol: Cualquier nodo se puede considerar considerar como la raíz de un

subárbol.

A B

Hojas

Subárbol

 

C E

 

F

D

G

H   I

 

Árboles Conceptos Básicos • Visitar : se dice que un nodo es visitado cuando el control del

programa se detiene en él para hacer alguna operación tal como acceder a su data, imprimir su data, modificar su data. Cuando solamente se pasa por sobre un nodo no se considera una visita al mismo. • Recorrer .... Un árbol significa visitar todos sus nodos en un orden específico. Ejemplo: B-A-C-E-F-D-G-H-I A B

 

C E

 

F

D

G

H   I

 

Árboles Conceptos Básicos • Nivel: el nivel de un nodo es el numero de generaciones que hay

desde la raiz hasta él. El nivel de la raíz es cero. • Profundidad o altura: es la longitud del camino mas largo desde la raiz hasta una hoja. La profundidad de este árbol es 2. La raiz tiene profundidad 0. A

B

 Nivel 0

 

C

E

 

D  Nivel 1

F G

 

H

  Nivel I 2

 

Árboles Árboles Binarios • Se dice que un árbol es binario cuando cada nodo puede tener un

máximo de dos hijos. hijos. • Los hijos de un nodo cualquiera se denotarán hijo derecho e hijo izquierdo, de acuerdo a su posición en el gráfico del árbol. A Hijo Izquierdo

B

C

 

 

E

Hijo Derecho

D F

 

G

 

Árboles Binarios Recorrido de Árboles Binarios Un recorrido de un árbol binario requiere que cada nodo del árbol sea procesado (visitado) una vez y sólo una en una secuencia predeterminada. Enfo En foqu ques es ge gene nera rale less pa para ra la secu secuen enci cia a de re reco corr rrid ido: o:

Recorr Reco rrid ido o en prof profun undi dida dad d, en el recorrido en profundidad, todos los desc de scen end die ient ntes es de un hi hijo jo se pr pro oce cesa san n an ante tess del si sig guien uiente te hi hijo jo..



Recorr Reco rrid ido o en am ampl plit itud ud(a (anc nchu hura ra)), en el recorrido en anchura, cada nivel se procesa totalmente antes de que comience el siguiente nivel. Este tipo de recorrido se denomina también recorridos por nivel. El sentido del recorrid ido o es de ar arrib ribaa ab abaj ajo o y de izqu izquier ierda da der derech echaa.



12/06/2019

 

Árboles Binarios Recorrido en amplitud  Algoritmo Insertar la raíz en cola Q; Mientras Q no vacía: Extraer nodo n de Q; Insertar en Q los hijos de n;

3 Camino 3 1 6 2 5 7 4 6

1 2

5 4

7

RecorridoAmplitud Inicio Ptr = raiz InitCola()  AddCola(Ptr) Mientras Not ColaVacia() ColaVacia() hacer  ptr=SupCola() Mostrar ptr^.inf  Si ptr^izq NULL entonces  AddCola(ptr^.izq) Fin_si Si ptr^der NULL entonces  AddCola(ptr^.der) Fin_si Fin_mientras Fin.

12/06/2019

 

Árboles Binarios

Recorrido en profundidad

Dado un árbol binario que consta de un nodo raíz (N), un subárbol izquierdo (I) y un subárbol derecho (D) se pueden definir  tres tipos de secuencia de recorrido en profundidad.. profundidad

Recorridos de árboles binarios

2 Subárbol izquierdo

3

2

1

3 Subárbol derecho

(a) Recorrido preorden 1° Padre

1 Subárbol izquierdo

3 Subárbol derecho

(b) Recorrido en orden 1° Hijo izquierdo

1 Subárbol izquierdo

2 Subárbol derecho

(c) Recorrido postorden 1° Hijo izquierdo

2° Hijo izquierdo

2° Padre

2° Hijo derecho

3° Hijo derecho

3° Hijo derecho

3° Padre

12/06/2019

 

Recorrido en profundidad

Árboles Binarios

Según sea la estrategia a seguir, los recorridos se conocen como enorden (inorder ) (orden simétrico), preorden (preorder  (preorder ) (orden previo), y postorden (postorder  (postorder ) (orden posterior). Preorden

(nodo-izquierdo-derecho)

(NID)) (NID

Enorden

(izquierdo-nodo-derecho)

IND)) ((IND

Postorden

(izquierdo-derecho-nodo)

(IDN)

Donde: N = Nodo raíz I = Subárbol izquierdo D = Subárbol derecho

12/06/2019

 

Árboles Binarios - Recorr Recorrido ido pre preorden orden (NID) Regla: Se procesa el nodo raíz , subárboles izquierdo y derecho. - Recor Recorrido rido pre preorde orden n (NID) 1. Recorrer el raíz (N (N). 2. Recorrer el subárbol izquierdo (I ( I) en preorden. 3. Recorrer el subárbol derecho (D (D) en preorden.

A Camino A, Camino  A, B, D, E, C, F F,, G

1 B 2

C 5

D

E

F

G

3

4

6

7

Recorrido preorden de un árbol binario 12/06/2019

 

- Reco Recorrido rrido p preorde reorden n (NID)  Algoritmo Preorden (val raiz ) inicio si (raiz no e ess nul nulo) o) Procesar(raiz) Preorden(raiz->subarbolIzquierdo) Preorden(raiz->subarbolDerecho) retorno fin Preorden Función Preorden en C (el tipo de los datos es entero): typedef int TipoEle TipoElemento; mento; struct nodo { TipoElemento TipoElem ento datos; struct nodo * hijo_izqdo, * hijo_dcho; }; typedef struct nodo Nodo; void Preorden (Nodo * p) { if (p) { printf(“%d ”, p->datos); Preorden(p->hijo_izqdo); } Preorden(p->hijo_dcho); 12/06/2019

}

Árboles Binarios

 

- Recor Recorrido rido pre preorden orden (N (NID) ID)

PreOrden Inicio InitPila()  AddPila( NULL) Ptr = raiz Mientras ptr NULL hacer  Mostrar ptr^.inf  Si ptr^der NULL NU LL entonces  AddPila( ptr^.der) Fin_si Si ptr^.izq NULL N ULL entonces Ptr = ptr^.izq Sino Ptr = SupPila() Fin_si Fin_mientras Fin. 12/06/2019

Árboles Binarios

 

Árboles Binarios - Recorr Recorrido ido en enorden orden ((NID) NID) Regla: Se procesa el nodo subárboles subárboles izquierdo, raiz y el subarbol derecho. - Rec Recorri orrido do eno enorde rden n ((IND IND)) Si el árbol no está es tá vacío, el método implica los siguientes pasos: 1. Recorrer el subárbol izquierdo (I (I) en inorden. 2. Visitar el nodo raíz (N (N). 3. Recorrer el subárbol derecho (D) en inorden. - Recorr Recorrido ido en enorden orden ((IND) IND)

A Camino D, B, E, A, F F,, C, G

4 B 2

C 6

D

E

F

G

1

3

5

7

Recorrido enorden de un árbol binario 12/06/2019

 

Árboles Binarios - Reco Recorrido rrido en enorden orden ((IND) IND)  Algoritmo Enorden Enorden (val raiz ) inicio si (raiz no es nulo) Enorden(raiz->subarbolIzquierdo) Procesar(raiz) Enorden(raiz->subarbolDerecho) retorno fin Enorden

Función Enorden en C void Enorden(Nodo * p) { if (p) {

}

Enorden(p->hijo_izqdo); Enorden(p->hijo_izqd o);

/* recorrer subárbol izquierdo */

printf (“%d “, p->datos);

/* visitar la raíz */

Enorden(p->hijo_dcho); Enorden(p->hijo_dcho );

/* recorrer subárbol derecho */

}

12/06/2019

 

- Recor Recorrido rido en enorden orden (I (IND) ND) InOrden Inicio InitPila()  AddPila(NULL) Ptr = raiz Mientras ptr NULL hacer  Mientras ptr NULL hacer   AddPila(ptr) Ptr = ptr^.izq Fin_mientras Ptr = SupPila() Tieneder =false Mientras Ptr NULL y no tieneder hacer  Mostrar ptr ^.inf  Si ptr^.der NULL entonces Ptr = ptr^.der  Tieneder = true Sino Ptr = SupPila() Fin_si Fin_mientras Fin_mientras Fin. 12/06/2019

Árboles Binarios

 

Árboles Binarios - Reco Recorrido rrido po postorde storden n (IDN) Regla: Se procesa el nodo subárboles izquierdo, derecho y la raiz

- Recorrido postorden (IDN) 1. Recorrer el subárbol izquierdo (I (I) en postorden. 2. Recorrer el subárbol derecho (D (D) en postorden. 3. Visitar el nodo raíz (N (N). - Recorr Recorrido ido pos postorden torden (IDN) A Camino D, E, B, F F,, G, C, A

7 B

C

3

6

D

E

F

G

1

2

4

5

Recorrido postorden de un árbol binario 12/06/2019

 

Árboles Binarios - Reco Recorrido rrido po postorde storden n (IDN)  Algoritmo Postorden Postorden (val raíz ) inicio si (raiz no es nulo) Postorden(raiz->subarbolIzquierdo) Postorden(raiz->subarbolDerecho) Procesar(raiz) retorno fin Postorden Función Postorden en C void Postorden(Nodo * p) { if (p) { Postorden(p->hijo_izqdo); Postorden(p->hijo_dcho); printf(“%d ”, p->datos);

} } 12/06/2019

 

Inicio Cima = 1 Pila[cima]=NULL Ptr = raiz Mientras ptr NULL hacer  Mientras ptr NULL hacer   AddPila( ptr) Si ptr^.der NULL entonces  AddPila(-ptr^.der)  AddPila(-ptr^.d er) Fin_si Ptr = ptr^.izq Fin_mientras Ptr = SupPila() Salir = false Mientras ptr NULL y no salir hacer  Si prt > 0 entonces Mostrar prt^.inf  Ptr = SuppPila() Sino Ptr = -ptr  Salir=true Fin_si Fin_mientras Fin_mientras Fin. 12/06/2019

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF