Arboles Binarios
Arboles Binarios
Arboles Binarios
Definición
Conjunto de nodos enlazados en el cual cada nodo tiene 0 o
más hijos y a lo mucho un padre
Uno de los nodos es etiquetado como raíz, y no tiene padre
Nodos sin hijos son llamados nodos hoja
Un árbol binario tiene a lo mucho dos hijos (izquierdo y
derecho)
Todos los hijos a la izquierda del nodo tienen valores menores
Todos los hijos a la derecha del nodo tienen valores mayores
2
Ejemplo
3
Beneficios
Eficiente inserción, eliminación y búsqueda
Tiempo de búsqueda es directamente proporcional a su
altura: O(h)
En árboles balanceados , la altura del árbol es O(log N)
En ciertas circunstancias, la altura del árbol puede degenerar,
conduciendo al peor caso: O(N)
4
Búsquedas en un árbol binario
5
Mínimo
El mínimo de un árbol binario de búsqueda es el nodo con el
valor más pequeño
Para encontrar el mínimo basta con seguir los enlaces
izquierda a partir de la raíz del árbol para encontrar el nodo
con el valor más pequeño. El mínimo es el nodo más a la
izquierda del árbol.
6
Máximo
El máximo es el nodo con el valor más alto. Encontrar el
máximo es muy similar a encontrar el mínimo, siguiendo los
enlaces derechos en lugar de los izquierdos. El máximo es el
nodo más a la derecha del árbol.
7
Sucesor
El sucesor de un nodo es el siguiente valor mas alto en el árbol
Implica dos casos:
1. Si un nodo tiene un hijo derecho, entonces el sucesor es el mínimo
de aquel
2. Si el nodo no tiene un hijo derecho, entonces se busca hacia atrás
hasta encontrar un nodo que sea hijo izquierdo, y entonces se usa su
padre
8
Predecesor
El predecesor de un nodo es aquel con el anterior valor más
pequeño
El algoritmo es esencialmente el inverso del sucesor
Implica dos casos:
Si el nodo tiene un hijo izquierdo, entonces se toma su máximo
Si no tiene un hijo izquierdo, se busca hacia atras hasta
encontrar un nodo hijo izquierdo
9
Inserción
La operación de inserción es bastante idéntica a la búsqueda,
excepto que cuando el valor no existe, se añade al árbol
Este ingresa como nodo hoja
10
Inserción
La inserción en el árbol de números aleatorios usualmente
mantiene la altura del árbol como O(log N)
¿Qué sucede si se insertan datos de manera ordenada?, como
a partir de un diccionario o guía telefónica?
11
Inserción
En caso de una inserción ordenada, la búsqueda en el árbol
degenerará e una lista enlazada
La altura y promedio de búsqueda será equivalente a O(N)
12
Inserción
Incluso, al tener los datos ordenados y generar un árbol que
tienda a crecer de manera no equilibrada se pueden aplicar
ajustes
Estos ajustes son mecanismos para mantener el balance del
árbol: árboles rojo y negro, árboles AVL, etc.
13
Eliminación
Se consideran 3 casos para el proceso de eliminación
1. Si el nodo a ser eliminado no tiene hijos
2. Si el nodo a ser eliminado tiene un hijo (izquierdo o derecho)
=> Se remplaza el nodo con uno de sus hijos
3. Si el nodo a ser eliminado tiene dos hijos => Se intercambia
el nodo con su sucesor y se procede de nuevo con el caso 1 o
2
14
Caso 1:nodo sin hijos
Se deseenlaza el nodo del padre y se elimina
15
Caso 2: nodo con un hijo
El padre del nodo a ser eliminado apunta al nodo hijo
16
Caso 3: nodo con dos hijos
Encontrar el sucesor del nodo a ser eliminado ( o el
predecesor)
17
Reemplazo de subárboles
Para realizar reemplazos dentro de un árbol binario, se puede
aplicar la rutina TRANSPLANTE
Esta rutina reemplaza un subárbol como un hijo de nodo
padre con otro subárbol
18
Casos de eliminación
a) El nodo z a eliminar no tiene hijo izquierdo => se
remplaza z por su hijo derecho r
19
Casos de eliminación
c) El nodo z a eliminar tiene 2 hijos, como en el caso de la
figura=> se remplaza z por y, actualizando el hijo
izquierdo de y para que sea de l, y dejando x como hijo
derecho de y
20
Casos de eliminación
d) El nodo z a eliminar tiene 2 hijos, como en el caso de la
figura=> se remplaza y por su hijo izquierdo x y se
establece a y como padre de r. Luego, se establece a y
como hijo de q y padre de l
21
Pseudocódigo de eliminación
22
Recorridos
Proceso de visitar cada del árbol exactament una vez
Tipos de órdenes de recorrido:
Preorden
Inorden
Postorden
23
Recorrido pre-orden
Pasos para realizar este tipo de recorrido:
1. Visitar la raíz
2. Recorren el subárbol izquierdo en pre-orden
3. Recorrer el subárbol derecho en pre-orden
24
Recorrido in-orden
Pasos para realizar este tipo de recorrido:
1. Se recorre el subárbol izquierdo en in-orden
2. Se visita la raíz
3. Se recorre el subárbol derecho en in-orden
D BA G E H C F
25
Recorrido post-orden
Pasos para realizar este tipo de recorrido:
1. Se recorre el subárbol izquierdo en post-orden
2. Se recorre el subárbol derecho en post-norden
3. Se visita la raíz
D B G H E F CA
26
Ejercicios
1. Construir un árbol binario de búsqueda para las siguientes
listas:
1.1 12, 34, -9, 12, 19, 23, 6, -4 (no permite repetidos)
1.2 80, 90, 34, 654, -23, -87, 5 (no permite repetidos)
1.3 Z, G, K, N, U, W, T, A ,U, S (si permite repetidos)
1.4 D, W, Q, N, D, W, S,Y, N, F (si permite repetidos)
2. Dado el árbol siguiente, elimine los elementos: 5, 10, 40,
8.
27
3. Proporcionar un versión recursiva de la función TREE-INSERT
4. ¿Es la operación de eliminación “conmutativa” en el sentido que
eliminando x y luego y de un árbol binario de búsqueda se
obtiene el mismo árbol que eliminando primero y y luego x?.
Argumente su respuesta
5. Suponer que en lugar de mantener en cada nodo x el atributo
x.p, señalando al padre de x, se mantiene x.succ señalando al
sucesor de x. Proporcionar un pseudocódigo para las
operaciones de búsqueda, inserción, y eliminación en un BST
usando esta representación (se podría implementar una
subrutina que devuelva el padre de un nodo)
28
Ejercicios
6. Si un nodo z en un árbol binario tiene dos hijos, se puede
elegir un nodo y como su predecesor en lugar de su
sucesor. Qué otros cambios al método TREE-DELETE
serían necesarios si se hiciera ello?. Algunos argumentan
que una buena estrategia es dar igual prioridad al
predecesor y sucesor, y procurar un mejor desempeño
empírico. Cómo podría el método TREE-DELETE ser
modificado para implementar tal estrategia?
7. ¿Cuál es máximo número de nodos que pueden ser
almacenados en un árbol binario con 10 niveles?
8. ¿Cuál es el mínimo número de niveles en un árbol binario
conteniendo 6023nodos?
29
Ejercicios
9. Una base de datos se va a desarrollar para realizar un
seguimiento de información de estudiantes en una
universidad. Nombres, números de identificación, y los
promedios de calificaciones serán incluídos.La información
será accedida por un campo clave, que viene a ser el
nombre del estudiante. Codificar una clase llamada Listing
que defina los nodos. La clase debe proporcionar
operaciones para buscar información en el árbol por una
variedad de datos, insertar, eliminar, actualizar, y listar
información. El programa debe proporcionar un menú para
operar las operaciones
30
ARBOLES AVL
Creadores
Georgi Maksímovich Adelsón-Velski es un
científico de la computación y matemático ruso. Junto
con Landis ideó en 1962 el árbol AVL, primer árbol
binario autoajustable
33
Definición
Es un árbol el cual en cada uno de sus nodos, las alturas de
sus subárboles izquierdo y derecho difieren como máximo en
1 unidad
Un árbol vacío es un árbol AVL
Si T es un árbol no vacío y Tl y Tr son subárboles => T es
AVL si y solo si:
Tl es AVL
Tr es AVL
|h(Tl) – h(Tr)| <=1
Búsqueda, inserción y borrado ~ O(log N), donde N es el
número de nodos
34
Factor de balanceo
• El factor de balanceo de un nodo u, denotado como bf(u) puede
definirse como:
bf(u) = h(uL) – h(uR), donde h(uL) es la altura izquierda del
subárbol de u, y h(uR) es la altura del subárbol derecho de u
• Cada nodo u de un árbol AVL puede tener un factor de balanceo
bf(u) de -1 o 0 o +1
• Los factores de balanceo se indican entre paréntesis al lado de
cada nodo
• Con el fin de facilitar las operaciones de inserción e eliminación
de manera eficiente, un campo adicional llamado factor de
balanceo bf puede ser añadido con la estructura del nodo
35
Factor de balanceo
Valores de bf:
• Si bf = 0, los subárboles izquierdo y derecho tienen la misma
altura
• Si bf = 1, el árbol está equilibrado en altura, pero el subárbol
derecho es un nivel más alto
• Si fe = -1, el árbol está equilibrado en altura, pero el subárbol
izquierdo es un nivel más alto
36
¿Cómo calcular el factor de balanceo?
Se sigue el camino desde el nodo que fue insertado o eliminado
hasta el nodo raíz
• Guardar el camino en una pila
• Añadir un nuevo puntero a cada nodo que apunte al padre del nodo actual
Al realizar una inserción o eliminación se debe volver a calcular el bf
Bf se incrementa si:
Se inserta un nodo en la rama derecha
Se elimina un nodo de la rama izquierda
Si se detecta cambio de altura, el recalculo se propaga hacia arriba
Bf se decrementa si:
Se inserta un nodo en la rama izquierda
Se elimina un nodo de la rama derecha
Si se detecta cambio de altura, el recalculo se propaga hacia arriba
37
¿AVL?
38
Ejemplo: 1
39
Ejemplo: 1
40
Ejemplo: 2
41
Ejemplo: 2
42
Operaciones en AVL
Al ser un árbol AVL un tipo de árbol binario de búsqueda, se
pueden aplicar las mismas operaciones de búsqueda,
inserción y eliminación, pero se deben considerar
mecanismos que garanticen el balanceo del árbol
Se incluyen operaciones de rotación
43
Declaración de un AVL
44
Operación: Búsqueda
Buscar un elemento en un árbol AVL es muy similar a la
operación de búsqueda de un BST
La altura de un AVL árbol de búsqueda AVL de N elementos
es O(log N), y en consecuencia, el tiempo de complejidad de
una operación de búsqueda es también O(log N)
45
Operación: Inserción
La inserción de un elemento en el árbol AVL tiene el mismo
procedimiento de inserción dado en el árbol de búsqueda
binaria
Pero, la inserción conduce a determinar el factor de balance
de un nodo
En caso que los valores del factor de balance no fueran -1, 0-
+1 => hay que balancear el árbol
46
Operación: Inserción
Aspectos .a tener en cuenta luego de realizar la operación de
inserción:
El bf de un árbol desbalanceado puede estar solo entre -2, -1, 0,
+1, y +2
Luego de la inserción, los nodos con bf igual a -2 o +2 =>
indican que su anterior bf fue -1 o +1 respectivamente
La inserción afecta el bf de los nodos que están solamente en el
camino desde la raíz al nuevo nodo insertado
El antecesor más cercano del nuevo nodo insertado cuyo bf es
+2 o -2 inicia la rotación
47
Ejemplo: rotación luego de inserción
48
Inserción: rotaciones
En un árbol AVL, si antes de la inserción, los bf de los nodos desde la
raíz hasta el nodo donde será insertado el nuevo fue 0, entonces el árbol
no llegará a estar desbalanceado
Si la inserción desbalancea a un árbol AVL, la altura del subárbol debe
ser ajustado por rotación con respecto a su antecesor más cercano
Las rotaciones se clasifican en cuatro tipos:
Rotación LL: el nuevo nodo es insertado como el subárbol izquierdo (L) del
subárbol izquierdo (L) de A
Rotación LR: el nuevo nodo es insertado como el subárbol derecho (R) del
subárbol izquierdo (L) de A
Rotación RR: el nuevo nodo es insertado como el subárbol derecho (R) del
subárbol derecho (R) de A
Rotación RL: el nuevo nodo es insertado como el subárbol izquierdo (L) del
subárbol derecho (R) de A
49
Rotación LL o rotación simple a la
derecha
50
Rotación LL o rotación simple a la
derecha
Ejemplo 1
51
Rotación LL o rotación simple a la
derecha
Ejemplo 2
52
Rotación LR o rotación doble derecha
53
Rotación LR o rotación doble derecha
Ejemplo 1
54
Rotación LR o rotación doble derecha
Ejemplo 2
55
Rotación RR o rotación simple a la
izquierda
56
Rotación RR o rotación simple a la
izquierda
Ejemplo 1
57
Rotación RR o rotación simple a la
izquierda
Ejemplo 2
58
Rotación RL o rotación doble a la
izquierda
59
Rotación RL o rotación doble a la
izquierda
Ejemplo 1
60
Rotación LR o rotación doble a la
izquierda
Ejemplo 2
61
Algoritmo inserción
Insert(T, element)
GETNODE(X)
DATA(X)=element
LCHILD(X)=RCHILD(X)=NULL and bf(x)=0
If the tree T is empty then
Set T to X.
Exit.
//when AVL search tree T is non empty.
Starting from the root search the place to insert the new element.
Identify the most recently seen node with balance factor of either −1 or +1 as the ancestor node A.
If the element already exists
Print “Insertion not possible as the element already exists”.
Exit.
If no ancestor node A exists then update the balance factors in the path from root and exit.
If ancestor node A is found then
If(bfA)=+1 and the new node is inserted in the right subtree of A) or (bf(A)=-1 and the node is inserted in the left subtree of A)then
bf(A)=0.
Update the balance factors of all the nodes on the path from A to the newly inserted node.
Exit.
Else
Recognize the type of imbalance at A and execute the appropriate rotation.
Update the balance factors of nodes in the path from new subtree root to the newly inserted node as needed by the rotation.
Reset the left and right subtrees of the corresponding nodes.
Exit
End.
62
Operación: eliminación
La eliminación de un nodo en un árbol AVL puede causar
desbalance
Rotaciones son invocadas luego de la eliminación
El factor de balance de algunos o todos los nodos incluidos en el
camino desde la raíz al padre del nodo eliminado pueden ser
alterados
Observaciones:
• Si nodo borrado del subárbol derecho de p => bf(p) +1
• Si nodo borrado del subárbol izquierdo de p => bf(p) -1
• h(árbol) -1 si el nuevo bf(p) = 0
• h(árbol) no se altera si el nuevo bf(p) = +1 o -1
• Si bf(p) = +2 o -2 => invocar rotaciones
63
Eliminación: rotaciones
Rotaciones tipo R: si la eliminación procede del subárbol derecho
de A (se considera que se tiene un subárbol izquierdo con raíz B)
• R0: si bf(B) = 0
• R1: si bf(B) = +1
• R-1: si bf(B) = -1
Rotaciones tipo L: si la eliminación procede del subárbol izquierdo
de A (se considera que se tiene un subárbol derecho con raíz B)
• L0: si bf(B) = 0
• L1: si bf(B) = +1
• L-1: si bf(B) = -1
64
Rotaciones tipo R
Rotación R0
65
Rotación R0
Ejemplo
66
Rotaciones tipo R
Rotación R1
67
Rotación R1
Ejemplo
68
Rotaciones tipo R
Rotación R-1
69
Rotación R-1
Ejemplo
70
Rotaciones tipo L
71
Ejercicios
En el AVL siguiente Insertar la secuencia: 38, 20, 57, 47 y 46
72
Ejercicios
Equilibrar el siguiente árbol
73
Ejercicios
Considerando el árbol dado, eliminar el nodo 5
74
Ejercicios
Considerando el árbol dado, eliminar el nodo 96
75
Ejercicios
Considerando el árbol dado, eliminar el nodo 67
76