Documentos de Académico
Documentos de Profesional
Documentos de Cultura
´Arboles
La relaci´on es conexa, es decir, existe una composici´on de relaciones entre cualquier par de
nodos en el ´arbol.
No admite ciclos.
Definici´on: Un ´arbol T es un conjunto finito de uno o m´as nodos tal que: (i) hay un nodo
especialmente llamado raı´z R; (ii) los dem´as nodos est´an particionados en n ! 0 conjuntos
desconectados
T1 . . . Tn, donde cada uno de estos conjuntos es un ´arbol, ası´ llamados sub´arboles de la
ra´ız. As´ı:
Ti # Tn = $ (2)
Gr´afico:
B CD
EFGHIJ
K LM
Listas:
(A(B(E(K,L),F),C(G),D(H(M),I,J)))
50Data
link1 linkn
0 A111
0 B10 F
0 C0 G0 D1
0 I0 J
0 H0 M
0 E0 K0 L
Teoremas:
Definici´on: Un ´arbol binario es un n´umero finito de nodos que es vac´ıo o consiste de una
ra´ız con
dos ´arboles binarios desconectados llamados sub´arbol izquierdo y derecho. Se llaman los
nodos que
no tienen hijos, nodos hojas o terminales. Nodos con uno o dos hijos son llamados nodos
internos.
51structureBTREE(ITEM)
declare
for all bt1, bt2 ' BT REE, i, i1, i2 ' item let
, i ! 0; y el m´aximo
k+1
% 1, k ! 0.
Base inducci´on: La ra´ız es el u´nico nodo en el nivel 0. Por lo tanto, el m´aximo nu´mero de
nodos
en el nivel i = 0 es 2
=2
i
.
i!1
, por la hip´otesis de
inducci´on. Debido a que cada nodo del ´arbol tiene como m´aximo grado 2, el n´umero de
nodos
El m´aximo .
n=
k!
i=0
=2
k+1
%1
Lema: Por cada ´arbol binario no vac´ıo T , si n es el n´umero de nodos terminales (hojas) y m
es el
Prueba: Sea l el n´umero de nodos de grado uno, entonces el nu´mero total de nodos N en el
´arbol
es N = n + m + l.
Todos los nodos en el ´arbol excepto por la raı´z tienen un arco de llegada. Entonces, N es igual
al
nu´mero de arcos B + 1. Tambie´n, todo arco emana de un nodo de grado uno o de grado dos.
As´ı:
Un ´arbol binario se representa en un arreglo del siguiente modo: si un nodo ocupa la posici´on
i,
Usando punteros, cada nodo es un registro con tres campos: el dato, el puntero al hijo
izquierdo y
Procedure INORDER(T )
if T =, nil do [
call INORDER(LCHILD(T ))
print(DATA(T))
call INORDER(RCHILD(T )) ]
end INORDER
Procedure P REORDER(T )
if T =, nil do [
print(DATA(T))
call P REORDER(LCHILD(T ))
call P REORDER(RCHILD(T )) ]
end P REORDER
if T =, nil do [
print(DATA(T)) ]
Si T es un ´arbol binario con ra´ız de n nodos, el caminamiento en el ´arbol toma !(n). Sea T (n)
el
tiempo que toma el recorrido de un ´arbol binario de n nodos. El menor tiempo posible es el
de un
´arbol vacı´o T (0) = c para alguna constante positiva c. Para n > 0, suponga que la llamada al
recorrido ocurri´o en un nodo x raı´z con k nodos en el sub´arbol izquierdo y n%k%1 hijos en el
sub´arbol
refleja el tiempo de ejecuci´on en el nodo ra´ız (o sea, el tiempo de las llamadas recursivas
esencialmente). Provemos que T (n) = (c+d)n+c. Para n = 0, nosotros tenemos que (c+d)0+c = c
= T (0).
T (n) = T (k) + T (n % k % 1) + d
= (c + d)n + c % (c + d) + c + d
= (c + d)n + c (3)
Un ´arbol binario de bu´squeda es un ´arbol binario donde la ra´ız es siempre mayor que los
nodos del
sub´arbol izquierdo y menor que todos los nodos del sub´arbol derecho.
structureBBTREE(ITEM)
declare
for all bt1, bt2 ' BT REE, i, i1, i2 ' item let
B´usqueda:
Procedure BUSCAR(N, T )
// N es el valor buscado
if T =, nil do [
end BUSCAR
// N es el valor buscado
p := T
while p =, nil do [
else p := RCHILD(p) ]
end BUSCAR
En el peor caso, la bu´squeda llega hasta la hoja de un´arbol pasando por un camino desde la
raı´z hata la hoja, es decir, es un camino de largo h, con h siendo la profundidad.
M´ınimo y M´aximo:
Procedure MINIMUM(x)
x := LCHILD(x) ]
return x
end MINIMUM
Procedure MAXIMUM(x)
x := RCHILD(x) ]
return x
end MAXIMUM
Ambos Algoritmos tienen complejidad O(h) ya que ambos siguen el camino desde la ra´ız a la
Sucesor y Predecesor:
55Procedure SUCESSOR(x)
// x es un nodo en el ´arbol
y := P ARENT (x)
x := y
y := P ARENT (y) ]
return y
end SUCESSOR
Si un nodo x tiene un sub´arbol derecho, el sucesor y es el mı´nimo valor del sub´arbol
derecho.
La complejidad del algoritmo es O(h) porque sigue el camino hacia una hoja del sub´arbol
Insertar y Borrar:
// P es el nodo a insertar
LCHILD(T):= P
return ]
else
else
RCHILD(T):= P
return ]
else
end INSERT AR
En el peor caso, la inserci´on en un ´arbol se hace en un nodo hoja, lo que queda dado por la
profundidad del ´arbol O(h)antes de insertar. Ojo, al insertar, esta profundidad puede variar.
y := P
else y := SUCCESSOR(P )
x := LCHILD(y)
else x := RCHILD(y)
if x =, nil then [
T := x
if y =, x then
DATA(P) := DATA(y)
return y
end DELET E
Para borrar se consideran 3 casos. Si P no tiene hijos, modifique el padre de P para reemplazar
H T
B LRU
A D K M P
I
J
H T
B LRU
H T
B LRU
A D K
57Si P tiene s´olo un hijo, se divide P haciendo un nuevo enlace entre su hijo y su padre.
H T
B LRU
A D K M P
H T
B LRU
A D I M P
Finalmente, si el nodo tiene dos hijos, se divide el sucesor de P , y, el cual no tiene hijo
H T
B LRU
A D K M P
I T
B LRU
A D K M P
igual a la profundidad del sub´arbol derecho ±1. A su vez, esta profundidad es satisfecha
recursivamente por los sub´arboles. Por ejemplo:
58H T
B JRU
A D P
AC
B
El problema sucede cuando al insertar el nodo, se desbalancea el ´arbol. Eso sucede en dos
caso
posibles:
La soluci´on es rotar el ´arbol una vez insertado el nodo. En el primer caso, la rotaci´on es
simple y
59D
BD
AC
Otra situaci´on a considerar es al borrar un nodo de un ´arbol que est´a balanceado y que se
desbalancea.
AC
D
AD
Al igual que para inserci´on se deben realizar rotaciones. A diferencia de cuando se inserta, sin
embargo, los ´arboles resultantes pueden cambiar su profundidad y por lo tanto, no se puede
garantizar
En resumen:
Al insertar:
Al eliminar:
1. borrar el nodo
4 11
3 6 9 18
2 8 14 19
12 17 22
20
4 18
3 6 11 19
2 8 14 22
9 12 17 20
rotación izquierda
Sin embargo, al tomar el desbalance mas profundo (m´as cercano a la hoja donde se inserta el
617
4 11
3 6 9 18
2 8 14 19
12 17 22
20
4 18
3 6 11 20
2 8 14 19 22
9 12 17
rotación doble
αβ
γα
βγ
right rotation(T,y)
left rotation(T,y)
// x nodo de rotatci´on
y := RCHILD(x)
RCHILD(x) := LCHILD(y)
P ARENT (LCHILD(y)) := x
T := y
LCHILD(y) := x
PARENT(x) := y
1. Combinando preorden con inorder. Dado una secuencia de un ´arbol binario en preorden y
preorden sea la ra´ız y al consider la definici´on en inorden de que todos los antecesores de A
sean los hijos izquierdo y los restantes en el lado derecho. Eso nos queda:
B,C D,E,F,G,H,I
B D,E,F,G,H,I
B D
C E F
G J
Se puede decir que cada ´arbol binario tiene un u´nico par de secuencias pre-orden-inorden.
Para ¿n?
(permutaciones en inorden).
las formas posibles es igual al n´umero total de ´arboles binarios con n nodos.
1,2,3;3,2,1;2,1,3;2,3,1;3,2,1
2
3
23
En forma m´as general, queremos una expresi´on bn de los nu´meros de ´arboles binarios
distintos
con n nodos. Se puede deducir que bn es la suma de todos los posibles ´arboles binarios de la
, bn!i!1:
bn =
0"i"n!1
bibn!i!1, n ! 1 - b0 = 1
Con recurrencia
B(x) =
i#0
bix
con
B(0) = b0 = 1
B(x) =
1%
1 % 4x
2x
B(x) =
m#0
"
1/2
m+1
(%1)m
2m+1
xm
en B(x):
bn) =
n+1
"
2n
n
#
bn = O(
n3/2
Defina, adem´as, una funci´on que realice el SWAP BT REE(btree) & btree que invierte los
hijos izquierdos y derechos en forma recursiva y la funci´on que entrega el nu´mero de nodos
SWAP BT REE(MAKEBT (l, d, r)) ::= MAKEBT (SWAP BT REE(r), d, SWAP BT REE(l))
4. ´Arboles Completos: Un ´arbol con altura h es completo si tiene todos los niveles llenos
hasta
el nivel h (ojo, se asume aquı´ que a la altura h, el nivel es h + 1) . El nivel h + 1 est´a lleno de
izquierda a derecha y a partir de un punto en adelante est´a vacı´o. Escriba un algoritmo que
5. ´Arboles atados:
´Arboles atados son aquellos donde los nodos nulos de un ´arbol binario
tradicional son usados para asociar el nodo al nodo sucesor o antecesor en el recorrido del
figura se muestra un ´arbol atado para un recorrido en inorder que apoya los algoritmos de
sucesor o predecesor.
66I 0
AH
punteros adicional
punteros originales
Figura 20:
´Arboles Atados
N := RLINK(N)
endSUCESSOR
Procedure WALK(NodeR)
N := R
Visite N
N := SUCCESOR(N)
while N =, nil do [
visite N
N := SUCCESOR(N)]
endWALK
atado T2.
// RT1 es la ra´ız de T1
R := RT1
S := N
RLINK(N) := R
Q := R
Q := R
LLINK(Q) := N
endINSERT AR
67