tema8
TRANSCRIPT
Unidad IV
Tema 8: Arboles Binarios
Profesor: Jorge Escalona / Tobías Bolívar
Email: [email protected] / [email protected]
Página Web: http://estructuradatos.tripod.com
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.
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.
Terminología Básica
a
b d
e f
i j
gh
c
k
raiz, ancestro
padre
nodos
hijo hijo
descendiente
Hoja
(sin hijos )
e, i, k, g, h
son hojas
Nodo interno
hermano
Sub-arbol
a
b d
e f
i j
gh
c
k
raiz
Un nodo y todos
sus descedientes.
Caminos de un Arbol
a
cb
ef
d
g
j
ih
Camino 1 Camino 2
Camino 1: { a, b, f, j }
Camino 2: { d, i }
Existe un único camino
desde cualquier nodo a sus
descendientes.
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
Grado
7
3 10
8
4
12
16 5
211
9
El número de hijos
de un nodo x es
llamado el grado de x.
grado = 3
grado = 1 grado = 0
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
bc
f
e
Subarbol izquierdoSubarbol derecho
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
TDA Arbol Binario
a
b
fe
c
a rightleft
left right
left right
right
rightleft
fe
cb
left
g
left right
NULL
g
Recorrido InOrden
a
bc
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
Recorrido PreOrden
a
bc
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
Recorrido PostOrden
a
bc
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
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 izquierdaElementos mayores a un
nodo están a la derecha
Elementos mayores a un
nodo están a la derecha
ABB: Buscar un elemento
15
10
6
20
12
142 8
2518
9
9 < 15
9 < 10
9 > 6
9 > 9
9 == 9 T(n) = h +1 = O(lg n)T(n) = h +1 = O(lg n)
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
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
ABB: Eliminar un elemento
15
10
6 12
null
a) Antes de eliminara) Antes de eliminar
Elemento a elimiar = 12
15
10
6 12Esperando
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
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
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
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
14no tiene hijo izquierdo
ir al hijo izquierdo
15
18
ir al hijo izquierdo
sucesor
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 padrenodo a eliminar
paso 1
paso 220
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;
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 padrenodo 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;