1. Unidad IV
Tema 8: Arboles Binarios
Profesor: Jorge Escalona / Tobías Bolívar
Email: escaljorge@gmail.com / tobiasbolivar@gmail.com
Página Web: http://estructuradatos.tripod.com
2. Arboles - Definición
Un grafo conectado, aciclico, no dirigido T = (V, E).
| E | = | V | - 1
Mínimamente conectado --- T es desconectado si cualquier arista es removida.
Máximamente acíclico --- T contiene un ciclo si culquier arista es incluida.
3. Arboles - Introducción
Estructuras de datos altamente eficientes:
• Inserciones y eliminaciones tienen un tiempo de ejecución
menor a una lista Enlazada O(n=) lg n.
• Algoritmos de Búsquedas con tiempos de ejecución igual a un
arreglo ordenado O(n) = lg n.
4. Terminología Básica
a
b d
e f
i j
g
h
c
k
raiz, ancestro
padre
nodos
hijo hijo
descendiente
Hoja
(sin hijos )
e, i, k, g, h
son hojas
Nodo interno
hermano
6. Caminos de un Arbol
a
c
b
e
f
d
g
j
i
h
Camino 1 Camino 2
Camino 1: { a, b, f, j }
Camino 2: { d, i }
Existe un único camino
desde cualquier nodo a sus
descendientes.
7. Altura y Profundidad
7
3 10
8
4
12
16 5
211
9
altura = 4 nivel 0
nivel 1
nivel 2
nivel 3
nivel 4
Altura del nodo = 2
9. Arboles Binarios
Cada nodo tiene como máximo dos hijos.
Hijo izquierdo:el nodo hijo a la izquierda.
Hijo derecho: el nodo hijo a la derecha.
r
a
a) Es vacío
b) T consiste de tres subconjuntos separados:
1) un nodo raiz
2) un subarbol binario izquierdo
3) un subarbol binario derecho
Un conjunto de nodos T es un árbol binario si:
a
d
b
c
f
e
Subarbol izquierdo
Subarbol derecho
10. Arboles binarios llenos y completos
Arbol binario lleno: Arbol binario completo:
Cada nodo es una hoja Todas las hojas tienen la misma
o tiene grado igual a 2. profundidad y todos los nodos
internos tienen grado 2.
7
3
8 12
10
128
103
73
11 2
N° Nodos = 2h+1 -1
12. Recorrido InOrden
a
b
c
inOrden(A)
1.Llamar inOrden(B)
2. Visitar A
3. Llamar inOrden(C)
inOrden(B)
1.Llamar inOrden(null)
2. Visitar B
3. Llamar inOrden(null)
inOrden(C)
1.Llamar inOrden(null)
2. Visitar C
3. Llamar inOrden(null)
inOrden(null)
Retornar
inOrden(null)
Retornar
inOrden(null)
Retornar
inOrden(null)
Retornar
13. Recorrido PreOrden
a
b
c
preOrden(A)
1. Visitar A
2.Llamar preOrden(B)
3.Llamar preOrden(C)
preOrden(B)
1. Visitar B
2.Llamar preOrden(null)
3.Llamar preOrden(null)
preOrden(C)
1. Visitar C
2.Llamar preOrden(null)
3.Llamar preOrden(null)
preOrden(null)
Retornar
preOrden(null)
Retornar
preOrden(null)
Retornar
preOrden(null)
Retornar
14. Recorrido PostOrden
a
b
c
postOrden(A)
1.Llamar postOrden(B)
2.Llamar postOrden(C)
3.Visitar A
postOrden(B)
1.Llamar postOrden(null)
2.Llamar postOrden(null)
3.Visitar B
preOrden(C)
1.Llamar postOrden(null)
2.Llamar postOrden(null)
3.Visitar C
postOrden(null)
Retornar
postOrden(null)
Retornar
postOrden(null)
Retornar
postOrden(null)
Retornar
15. Arbol binario de búsqueda
15
10
6
20
12
142 8
2518
9
Elementos menores a un
nodo están en la izquierda
Elementos menores a un
nodo están en la izquierda
Elementos mayores a un
nodo están a la derecha
Elementos mayores a un
nodo están a la derecha
17. ABB: Insertar un elemento
15
10
6 12
15
10
6 12
14null
a) Antes de insercióna) Antes de inserción b) Después de inserciónb) Después de inserción
18. ABB: Eliminar un elemento
Casos:
1) El nodo a ser eliminado es una hoja (no tiene hijos)
2) El nodo a ser eliminado tiene un hijo
3) El nodo a ser eliminado tiene dos hijos
Casos:
1) El nodo a ser eliminado es una hoja (no tiene hijos)
2) El nodo a ser eliminado tiene un hijo
3) El nodo a ser eliminado tiene dos hijos
19. ABB: Eliminar un elemento
15
10
6 12
null
a) Antes de eliminara) Antes de eliminar
Elemento a elimiar = 12
15
10
6 12
Esperando
garbage
collection
b) Después de eliminarb) Después de eliminar
Caso 1: El nodo es una hojaCaso 1: El nodo es una hoja
nodo a ser
eliminado
20. ABB: Eliminar un elemento
15
10
6 12
a) Antes de eliminara) Antes de eliminar
nodo a ser
eliminado
b) Después de eliminarb) Después de eliminar
Caso 2: El nodo tiene un hijoCaso 2: El nodo tiene un hijo
19
14
15
10
6 19
14
21. ABB: Eliminar un elemento
15
10
6 14
a) Antes de eliminara) Antes de eliminar
nodo a ser
eliminado
b) Después de eliminarb) Después de eliminar
Caso 3: El nodo tiene dos hijosCaso 3: El nodo tiene dos hijos
1912
15
12
6 14?
?
sucesor de 10
19
22. ABB: Eliminar un elemento
10
6 20
a) El sucesor es el hijo derecho del nodoa) El sucesor es el hijo derecho del nodo
Encontrar el
sucesor de
este nodo
b) El sucesor es el descendiente más a la
izquierda del hijo derecho del nodo
b) El sucesor es el descendiente más a la
izquierda del hijo derecho del nodo
Caso 3: Encontrar el sucesorCaso 3: Encontrar el sucesor
30no tiene
hijo izquierdo
ir al hijo
derecho
sucesor
10
6 20
Encontrar el
sucesor de
este nodo
30
ir al hijo
derecho
12
14
no tiene
hijo izquierdo
ir al hijo
izquierdo
15
18
ir al hijo
izquierdo
sucesor
23. ABB: Eliminar un elemento
10
6 20
a) Antes de eliminara) Antes de eliminar
Caso 3: Eliminar con el sucesor de hijo derechoCaso 3: Eliminar con el sucesor de hijo derecho
30no existe
nodo a ser
eliminado
sucesor
5 padre
nodo a eliminar
paso 1
paso 2
20
6 30
5
paso 1
paso 2
b) Después de eliminarb) Después de eliminar
1) padre.der = sucesor;
2) sucesor.izq = nodoEliminar.izq;
24. ABB: Eliminar un elemento
a) Antes de eliminara) Antes de eliminar
Caso 3: Eliminar con el sucesor de hijo más a la izquierda del hijo derechoCaso 3: Eliminar con el sucesor de hijo más a la izquierda del hijo derecho
a) Después de eliminara) Después de eliminar
10
no existe
20
3015
18
6
5 padre
nodo a eliminar
paso 3
paso 4 paso 2
paso 1
paso 1
nodo a eliminar
padre del
sucesor
sucesor
hijo derecho del sucesor
15
20
3018
6
5
paso 3
paso 4 paso 2
paso 1
1) sucesorPadre.izq = sucesor.der;
2) sucesor.der = nodoEliminar.der;
3) padre.der = sucesor;
4) sucesor.izq = actual.izq;