Arboles
April 13, 2023 | Author: Anonymous | Category: N/A
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