Professional Documents
Culture Documents
Estructuras de Datos
FIEC03012
Estructuras de Datos
ESPOL 1
2016-1T
INTRODUCCION
Las listas enlazadas son estructuras lineales
Son flexibles pero son secuenciales, un elemento detrs de otro
Los rboles
Junto con los grafos son estructuras de datos no lineales
Superan las desventajas de las listas
Sus elementos se pueden recorrer de distintas formas, no
necesariamente uno detrs de otro
Son muy tiles para la bsqueda y recuperacin de informacin
Estructuras de Datos
ESPOL 2
2016-1T
CONCEPTO
A
Estructura que organiza sus elementos formando
jerarquas: PADRES E HIJOS
Los elementos de un rbol se llaman nodos B C
Si un nodo p tiene un enlace con un nodo m,
p es el padre y m es el hijo D E F
Los hijos de un mismo padre se llaman: hermanos
Todos los nodos tienen al menos un padre, menos la raz: A
Si no tienen hijos se llaman hoja: D, E, F y C
B
Un subrbol de un rbol
Es cualquier nodo del rbol junto con todos sus
descendientes D E F
Estructuras de Datos
ESPOL 3
2016-1T
TERMINOLOGIA
Camino: Secuencia de nodos conectados dentro de un arbol
Longitud del camino: es el numero de nodos menos 1 en un
camino
Altura del rbol: es el nivel mas alto del rbol
Un rbol con un solo nodo tiene altura 1
Nivel(profundidad) de un nodo: es el numero de nodos entre el
nodo y la raz.
Grado(aridad) de un nodo: es numero de hijos del nodo
Estructuras de Datos
ESPOL 4
2016-1T
TDA ARBOL : DEFINICION INFORMAL
Valores:
Conjunto de elementos, donde SOLO se conoce el nodo raz
Un nodo puede almacenar contenido y estar enlazado con
Sus rboles hijos (pueden ser dos o varios)
Operaciones: Dependen del tipo de rbol, pero en general tenemos
Vaciar o inicializar el Arbol
void Arbol_Vaciar (Arbol *A);
Eliminar un rbol
void Arbol_Eliminar(Arbol *A);
Saber si un rbol esta vaco
bool Arbol_EstaVacio(Arbol A);
Recorrer un rbol
void PreOrden(Arbol A)
void EnOrden(Arbol A)
void PostOrden(Arbol A)
Estructuras de Datos
ESPOL 5
2016-1T
TDA ARBOL: DEFINICION FORMAL
Estructuras de Datos
ESPOL 6
2016-1T
ARBOLES BINARIOS A
B C
Tipo especial de rbol
Cada nodo no puede tener mas de dos hijos D
Estructuras de Datos
ESPOL 7
2016-1T
DEFINICIONES RECURSIVAS SUB. DER.
La definicin del rbol es recursiva A
Nivel 1
Se basa en si misma
B C
La terminologa de los rboles
D
Tambin puede ser definida en forma recursiva
Ejemplo: NIVEL de un rbol E
Estructuras de Datos
ESPOL 10
2016-1T
OTROS
Estructuras de Datos
ESPOL 11
2016-1T
AB y NODOAB: DEFINICION FORMAL
Estructuras de Datos
ESPOL 12
2016-1T
AB Y NODOAB: DECLARACION
Interface ArbolBinario<T>{
}
Un rbol binario: conjunto de nodos
Solo se necesita conocer el nodo raz class NodoAB<T> implements ArbolBinario<T>{
T contenido;
NodoAB izq, der;
Cada nodo NodoAB padre;
}
Tiene Contenido y
Dos enlaces: rbol hijo izquierdo, rbol hijo derecho
Un nodo hoja, es aquel cuyos dos enlaces apunta a null
Un nodo en un rbol tiene mas punteros a null que un nodo de una lista
De un rbol solo se necesita conocer su raz
Estructuras de Datos
ESPOL 13
2016-1T
NODOAB: OPERACIONES
Operaciones Bsicas
Crear un nuevo nodo hoja y eliminar hoja existente
NodoAB CrearHoja(<T> contenido);
void eliminar (NodoAB nodo);
Saber si el nodo es o no hoja
Bool esHoja(NodoAB nodo);
Estructuras de Datos
ESPOL 14
2016-1T
NODOAB: MAS OPERACIONES
Consultas de los campos de un nodo
<T> ConsultaContenido(NodoAB nodo);
NodoAB hijoIzq (NodoAB nodo);
NodoAB hijoDer(NodoAB nodo);
Estructuras de Datos
ESPOL 15
2016-1T
AB: OPERACIONES
Crear y Eliminar
AB_Vaciar(AB A);
AB_Eliminar(AB A);
Estado del Arbol
bool AB_EstaVacio(AB A);
Aadir y remover nodos
void AB_InsertarNodo(AB A, NodoAB nuevo)
NodoAB AB_SacarNodoxContenido(AB A, <T> contenido);
NodoAB AB_SacarNodoxPos(AB A, NodoAB pos);
Busqueda por contenido
NodoArbol AB_Buscar(AB A, <T> contenido);
Recorridos
void AB_PreOrden(AB A);
void AB_PosOrden(AB A);
void AB_EnOrden(AB A);
Estructuras de Datos
ESPOL 16
2016-1T
AB: INSTANCIANDO Y CREANDO
Un Arbol Vaco, es aquel cuyo nodo raz apunta a NULL
void AB_Vaciar(AB A){
A = NULL;
}
A
Para aadirle una hoja al rbol, crear hoja: 1
A = NodoAB_CrearHoja( 1);
Estructuras de Datos
ESPOL 17
2016-1T
RECORRIDOS DE UN A.B.
Recorrer es
Visitar todos los elementos de una estructura
Como recorrer un rbol
Hay tantos caminos, cual escoger?
Existe tres recorridos tpicos
Nombrados de acuerdo a la posicin de la raz
Preorden: raz - subarbol izq. - subarbol der.
Enorden : subarbol izq. - raz - subarbol der.
Postorden : subarbol izq. - subarbol der. -raz
Estructuras de Datos
ESPOL 18
2016-1T
1. Visitar raiz
2. Preorden al Subarbol Izq.
3. Preorden al Subarbol Der.
EJEMPLO PREORDEN
G
1
D K
2 8
B E H
J M
3 6 9 12
A C F JI L
4 5 7 10 13
H
I
11
G-D
G-D-B-A-C-E
G-D-B-A-C
G-D-B-A
G-D-B
G-D-B-A-C-E-F
G-D-B-A-C-E-F-K
G-D-B-A-C-E-F-K-H
G-D-B-A-C-E-F-K-H-J
G-D-B-A-C-E-F-K-H-J-I
G-D-B-A-C-E-F-K-H-J-I-M
G-D-B-A-C-E-F-K-H-J-I-M-L
Estructuras de Datos
ESPOL 19
2016-1T
RECORRIDOS: IMPLEMENTACION
Las operaciones de recorrido son recursivas
Ejemplo: EnOrden
Recorrer EnOrden al subarbol izquierdo
Visitar nodo raiz
Recorrer EnOrden al subarbol derecho
En todo algoritmo recursivo debemos buscar dos casos
Bsico, para terminar la recursividad
Recursivo, donde la funcin se llama a si misma
Caso Recursivo
Caso Bsico Si !AB_EstaVacio(raiz)
Si AB_EstaVacio(raiz) AB_EnOrden(raiz->izq);
Terminar de recorrer Mostrar raiz
AB_EnOrden(raiz->der);
Estructuras de Datos
ESPOL 20
2016-1T
OPERACION ENORDEN
void enOrden(NodoAB arbol){
if(estaVacio(arbol))
return;
enOrden(arbol.izq);
System.out.println(arbol. contenido);
enOrden(arbol.der);
}
Arbol
ArbolVacio!,
Vacio!,Terminar
Terminar 4
B C
2 6
D E F G
Estructuras de Datos
ESPOL 21
2016-1T
EJEMPLO AB
G
7
D K
4 11
B E H
J M
2 5 10 13
A C F JI L
1 3 6 9 12
H
I
8
Estructuras de Datos
ESPOL 22
2016-1T
APLICACIN: EVALUACION DE EXPRESIONES
Estructuras de Datos
ESPOL 23
2016-1T
ARBOL DE EXPRESION
Arboles que representan expresiones en
memoria
Todos los operadores tienen dos operandos
La raiz puede contener el operador
Hijo izq: operando 1, Hijo derecho: operando 2
Ejemplo: (a+b) (a+b)*c
+ *
a b + c
Estructuras de Datos
ESPOL a b 24
2016-1T
EVALUAR UNA EXPRESION ARTIMETICA EN
INFIJA
Estructuras de Datos
ESPOL 25
2016-1T
CREAR UN ARBOL DE EXPRESION
Los operandos seran siempre nodos hoja del arbol
Al revisar un operando, creo una nueva hoja y la recuerdo
Los operadores seran nodos padre
Al revisar un operador, recuerdo las dos ultimas hojas creadas y uno
todo
pop() hijo derecho pop() hijo izquierdo
Recuerdo el resultado
A*B-C*D+H AB*CD*-H+ +
- H
D * *
-
C * A B C D
H *
B *
* C D
Estructuras de Datos
A ESPOLA B C D 26
A B
2016-1T
EVALUACION DEL ARBOL DE EXPRESION
Lo ideal es recuperar los dos operandos, el operador, y ejecutar la opcion
A B C D Si no
1. Res1 = Evaluo subarbol izquierdo
2. Res2 = Evaluo subarbol derecho
A*
(Ay*BB) -y (C*D)
CyD+
(C*D) y HH 3. Recupero la info de la raiz y efectuo la
operacin alli indicada, entre Res1 y Res2
Estructuras de Datos
ESPOL 27
2016-1T
ARBOL BINARIO DE BUSQUEDA
<>
55
Los elementos en un arbol
Hasta ahora no han guardado un orden 30 75
No sirven para buscar elementos
4 41 85
Los arboles de busqueda
Permiten ejecutar en ellos busqueda binaria <>
Dado un nodo: 6
Todos los nodos del sub. Izq. Tienen una clave menor
que la clave de la raiz 4 9
Todos los nodos del sub. Der. Tienen una clave mayor
que la clave de la raiz 5
Estructuras de Datos
ESPOL 28
2016-1T
TDA ABB: DEFINICION
<abb>::= NULL | <abb_nodo>
<abb_nodo>::=<clave>+<contenido>+<izq>+<der>
<izq>::=<abb>
<der>::=<abb>
Valores: <clave>::<<dato>>|{<<dato>>}
Conjunto de elementos<contenido>::<<dato>>|{<<dato>>}
Dado un nodo p,
Los nodos del rbol izquierdo almacenan valores menores al de p
Los nodos del rbol derecho almacenan valores mayores al de p
Operaciones
Son las mismas operaciones que para un AB
Pero en este caso ya tenemos reglas suficientes que nos indican como:
Insertar
Sacar y public class ABB_Nodo{
Buscar Object clave, contenido;
ABB_Nodo izq, der;
}
Estructuras de Datos
ESPOL 29
2016-1T
CREAR CON CLAVE
Como el nodo ahora tiene un campo clave
Cambian un poco las operaciones del nodo
Ejemplo
/* constructor */
public NodeAB(Object clave, Object contenido){
this.clave = clave;
this.contenido = contenido;
this.izq = NULL;
this.der= NULL;
}
Estructuras de Datos
ESPOL 30
2016-1T
CREACION DE UN ABB
Un arbol de busqueda debe mantener
A la derecha mayor a raiz
A la izq. Menor a raiz
Ejemplo:
Construya arbol con los siguientes elementos:
8, 3, 1, 20, 10, 5, 4
3 20
1 5 10
4
Estructuras de Datos
ESPOL 31
2016-1T
EJERCICIO EN CLASE
Construya el arbol para almacenar:
14, 8, 7, 1,12,16, 4,11
Estructuras de Datos
ESPOL 32
2016-1T
BUSQUEDA DE UN NODO
Dada una clave, devolver el nodo que la contiene
Se comienza en la raiz
Si el arbol esta vacio
Buscar(raiz,25)
Buscar(raiz,5)
No se encontro
Si clave buscada es igual a la clave del nodo evaluado
ENCONTRADO!!!
Si no 8
Si la clave buscada es mayor a la del nodo evaluado
Buscar en el subarbol derecho 3 20
Si no
Buscar en el subarbol izquierdo 1 5 10
4 No existe
Estructuras de Datos
ESPOL 33
2016-1T
IMPLEMENTACION DE LA BUSQUEDA
NodoABB buscar(NodoABB arbol, T clave){
if(estaVacio(arbol)) return null;
if(clave.compareTo(arbol.clave) == 0)
return arbol;
if(clave.compareTo(arbol.clave) > 0)
return buscar(arbol.der, clave);
else
return buscar(arbol.izq, clave);
}
Estructuras de Datos
ESPOL 34
2016-1T
INSERCION DE UN NODO
Muy parecido a la busqueda Insertar(raiz,15)
15>8der
Debo insertar en la posicion correcta
15<20izq
El arbol debe mantener sus propiedades 8
15>10
Pasos: 3 der 20
Estructuras de Datos
ESPOL 35
2016-1T
IMPLEMENTACION DE LA INSERCION
NodoABB insertar(NodoABB A, Object nuevo){
if(A == null) {
return new NodoABB(nuevo);
}
if (nuevo.compareTo(A.getContenido()) == 0) {
return A;
}
else if (nuevo.compareTo(A.getContenido()) > 0) {
A.setDerecho(insertar(A.getDerecho(), nuevo));
}
else {
A.setIzquierdo(insertar(A.getIzquierdo(), nuevo));
}
return A;
}
Estructuras de Datos
ESPOL 36
2016-1T
ELIMINACION DE UN NODO
Es mas compleja que la insercion Eliminar(raiz,34)
Estructuras de Datos
ESPOL 37
2016-1T
ELIMINACION DE UN NODO
Eliminar(raiz,5)
Estructuras de Datos
ESPOL 38
2016-1T