Professional Documents
Culture Documents
Laboratorio de Programacin II
Definicin
Un rbol est compuesto por un conjunto de
cero o ms nodos y un conjunto de enlaces (o
arcos) que conectan pares de nodos.
Cada nodo contiene:
Un valor (algn tipo de elemento)
Una referencia o puntero al hijo izquierdo (puede
ser null), y
Una referencia o puntero al hijo derecho (puede
ser null)
En todo rbol:
Existe un nodo distinguido como la raz, que
no tiene antecesores.
Todo nodo c est conectado por un enlace a
exactamente un solo nodo p, su padre.
Una hoja es un nodo terminal (no tiene hijos).
Existe un solo camino desde la raz a cada
hoja.
A no tiene padre, es
el nodo raz
La longitud de A hasta A es 0
La longitud de A hasta K es 3
Operaciones
Agregar
Buscar
Remover
Recorrer
Ir a raz
Primer hijo
Prximo hijo
Ms definiciones
Dos nodos son hermanos cuando comparten
el mismo padre.
Si existe un camino que va de U a V, entonces
U es un ancestro de V y V un descendiente de
U.
Ms definiciones
El tamao de un nodo es el nmero de sus
descendientes.
El tamao de un rbol es el tamao de su raz.
Vista recursiva
A
....
T1
T2
T3
Tk
rboles Binarios
Por definicin, ningn nodo puede tener ms
de dos hijos.
A los hijos se los nombran izquierdo y
derecho.
rboles Binarios
La definicin recursiva:
Un rbol puede estar vaco, o bien compuesto por
una raz, y un subrbol izquierdo y subrbol
derecho.
Profundidad
La profundidad de un
nodo es la distancia
desde la raz
a est a profundidad
cero
E est a profundidad 2
Balance
Un rbol binario est balanceado si el
anteltimo nivel del rbol est lleno (contiene
2n nodos).
En la mayora de las aplicaciones, lo ms til
es contar con un rbol razonablemente
balanceado.
Balance
balanceado
desbalanceado
Recorridos en un rbol
Definimos un rbol binario en forma recursiva:
una raz,
un subrbol izquierdo y
un subrbol derecho.
PostOrden
Se procesan los nodos de izquierda a derecha y
luego el padre.
InOrden
Se procesa el nodo de la izquierda, luego el padre,
y finalmente el nodo derecho.
Recorridos en un rbol
Como un rbol binario tiene tres partes, hay
seis formas posibles de recorrerlo:
raz, izquierdo, derecho
izquierdo, raz, derecho
izquierdo, derecho, raz
raz, derecho, izquierdo
derecho, raz, izquierdo
derecho, izquierdo, raz
InOrden:
F, B, G, A, I, E, K, J.
PreOrden:
A, B, F, G, E,I, J, K.
PostOrden:
F, G, B, I, K, J, E, A.
Recorrido preorden
primero la raz
recorrido preorden para un rbol binario:
public void preorderPrint(BinaryTree bt) {
if (bt == null) return;
print (bt.value);
preorderPrint (bt.leftChild);
preorderPrint (bt.rightChild);
}
Recorrido Inorden
la raz se visita en el medio.
recorrido en inorden para un rbol binario:
public void inorderPrint(BinaryTree bt) {
if (bt == null) return;
inorderPrint (bt.leftChild);
print (bt.value);
inorderPrint (bt.rightChild);
}
Recorrido postorden
la raz se visita al final
Aqu se muestra un recorrido en postorden
para un rbol binario
public void postorderPrint(BinaryTree bt) {
if (bt == null) return;
postorderPrint(bt.leftChild);
postorderPrint(bt.rightChild);
System.out.println(bt.value);
}
preorden
inorden
postorden
A
B
ABDECFG
C
E
DBEAFCG
DEBFGCA
ABB
ABB
NO ES UN ABB
S ES UN ABB
C
ABB
Los algoritmos de bsqueda en los rboles
binarios tienen una complejidad O(log N).
Idea del algoritmo:
Los datos se buscan usando una clave.
En un rbol binario se satisface la propiedad de
bsqueda ordenada. Esto es, para un nodo X, los
valores de las claves en el subrbol izquierdo son
menores al valor de la clave de X, y los valores en
el subrbol derecho son mayores.
Las Funciones
ms simples:
Agregar
Buscar
BuscarMax
BuscarMin
ms compleja:
Remover
Si el nodo es hoja, el proceso es sencillo.
Si el nodo tiene 2 hijos, la estrategia es reemplazar el
nodo a remover con el menor elemento del subrbol
izquierdo.
rboles de expresin
El rbol correspondiente a la expresin
(A+B)*(C-D)
*
RBOLES B
rbol B
Los nodos tienen ms de 2 hijos,
Cada nodo interno tiene entre k y 2k hijos y
entre (k-1) y (2k-1) claves,
Una hoja tiene entre (k-1) y (2k-1) claves,
La raz tiene al menos dos hijos,
Todas las hojas estn a la misma distancia de
la raz.
rbol B
Tiene una raz T.raz, con las siguientes propiedades:
Todo nodo x tiene atributos:
x.n, el nmero de claves almacenadas en el nodo
x,
Las x.n claves, x.key1; x.key2 ; ; x.keyx.n, se
almacena en orden no decreciente, de tal forma
que x.key1 x.key2 x.keyx.n,
x.hoja, es un valor boolean que es TRUE si x es
una hoja y FALSE si no.
Cada nodo interno x tambin contiene x.n+1
punteros x.c1; x.c2; ; x.cxn+1 a sus hijos.
El peso de un rbol B
El nmero de accesos a disco requeridos para la
mayora de las operaciones en un rbol B es
proporcional a la altura del rbol B.
Teorema del peor caso: Si n 1, entonces para
cualquier rbol B de n claves y altura h y grado
mnimo t 2,
h
+1
log
2
Peso
n 2k
h 1
h log k n
Divisin de un rbol B
Borrado
EJEMPLOS
Un rbol de 4 nodos
10
clave < 10
30
10 clave < 30
35
30 clave < 35
35 clave
B vs. B+
En un rbol B los elementos se sitan en los
nodos.
En un rbol B+ los elementos estn en las hojas,
los nodos internos tienen claves que dirigen la
bsqueda.
Un rbol 2-4+
10
4 7
1 3
15 30
10
16 17
30 40 50
Insertar
14
5 9
1 3
Insertar (2,T).
15 30
14
16 17
30 40 50
Insertar
14
1 2
Insertar (2,T).
15 30
14
16 17
30 40 50
Insertar
14
1 2
Insertar (4,T).
15 30
14
16 17
30 40 50
Insertar
14
1 2 3 4
Insertar (4,T).
15 30
14
16 17
30 40 50
Dividir
14
3 4
Insertar (4,T).
15 30
14
16 17
30 40 50
Corregir
14
3 5 9
3 4
Insertar (4,T).
15 30
14
16 17
30 40 50
Otra insercin
14
3 5 9
3 4
15 30
14
16 17
30 40 50
Dividir
14
3 5 9
3 4
5 6
15 30
14
16 17
30 40 50
Otra
14
3 5 9
3 4
5 6
15 30
14
16 17
30 40 50
Dividir
14
3 5 9
3 4
5 6 7
15 30
14
16 17
30 40 50
Otra
14
3 5 9
3 4
5 6 7
15 30
14
16 17
30 40 50
Otra
14
3 5 9
3 4
5 6 7 8
15 30
14
16 17
30 40 50
dividir
14
3 5 7 9
3 4
5 6
15 30
7 8
14
16 17
30 40 50
Y dividir
14
7 9
3 5
3 4
5 6
7 8
15 30
14
16 17
30 40 50
Y por ltimo
5 14
7 9
3 4
5 6
7 8
15 30
14
16 17
30 40 50
Insertar
Complejidad de O(log n) y a lo sumo O(logkn)
Cada divisin lleva O(k)
Puede mostrarse que la cantidad de divisiones
tiene una relacin de complejidad O(1) por
cada insercin.
Borrar
5 14
7 9
3 4
5 6
7 8
15 30
14
16 17
30 40 50
Borrar
5 16
7 9
3 4
5 6
7 8
30
16 17
30 40 50
Borrar
5 16
7 9
3 4
5 6
7 8
30
16 17
30 40 50
Borrar
5 16
7 9
3 4
5 6
7 8
30
16
30 40 50
Borrar
5 16
7 9
3 4
5 6
7 8
30
16
30 40 50
Borrar
5 16
7 9
3 4
5 6
7 8
30
30 40 50
Borrar
5 16
7 9
3 4
5 6
7 8
30
30 40 50
Borrar
5 9
7 9
3 4
5 6
7 8
30
30 40 50
Borrar
5 9
3 4
5 6
7 8
30
30 40 50
Borrar
5 9
3 4
5 6
7 8
30
30 40 50
Borrar
5 9
3 4
5 6
7 8
30
30 40 50
Fusionar
5 9
3 4
7 30
5 6
7 8
30 40 50
Y fusionar
5
7 30
3 4
5 6
7 8
30 40 50
Borrado
Quitar la clave.
Si es la nica clave en el nodo, quitar el nodo y
sea v el padre que pierde a un hijo. Si no,
terminar.
(*) si v tiene un hijo, y v es la raz, descartar v.
Si no (v no es una raz), si v tiene un hermano
w de grado 3 o 4, pasar un hijo de w a v y
terminar.
Si no, fusionar v con su hermano a un nodo de
grado 3 y repetir (*) con el padre de v.