Академический Документы
Профессиональный Документы
Культура Документы
ESTRUCTURAS DE DATOS
rboles Generales
Intuitivamente el concepto de rbol implica
una estructura donde los datos se
organizan de modo que los elementos de
informacin estn relacionados entre s a
travs de ramas.
Es un conjunto de elementos llamados nodos donde a
partir de cada nodo se ramifican uno o mas sub
rboles.
Permiten jerarquirizar la informacin, es decir,
agrupamiento de la informacin.
Definicin recursiva: rbol es un
conjunto de nodos que:
Es vaco, o bien,
Tiene un nodo raz del que descienden
0 o ms subrboles.
Es un conjunto de elementos
autoreferenciados llamados Nodos que
tienen 0 o mas ramificaciones
rboles Generales
Nodos: conjunto finito de
elementos.
15
Ramas: conjunto finito de lneas
dirigidas, que conectan nodos.
Grado del Nodo: nmero de 6 20
ramas descendentes con un
nodo.
Raz: primer nodo de un rbol no 4 10 17 22
vaco.
Camino: secuencia de nodos en
Raiz=15
los que c/nodo es adyacente al
siguiente. Nodos: 15, 6, 20.
Solo existe 1 camino entre la Raz y Ramas(15, 6); (20, 17)
un Nodo cualquier.
La distancia de un Nodo a la Raz Grado del 15= G(15)=2
determina la rapidez de bsqueda.
G(10)=0; G(20)=2
Terminologa
A Nivel 1 Padre: tiene Nodos sucesores.
Hijos: Nodos sucesores.
Descendientes: Hijos de los hijos
B Nivel 2 C Ascendientes: los padre y abuelos
de un nodo hijo.
Hermanos: 2 o mas nodos del
D E F G mismo padre.
Hojas: nodo sin hijos .
Nivel 3
Nivel de un nodo: distancia a la raz.
Padres: A; B y C. Altura o profundidad de un rbol:
Hijos: De A( B y C), de B (D y E) nivel de la hoja del camino ms largo
desde la raz ms uno.
Descendentes de B: D y E La altura de un rbol vaco es 0.
Ascendientes de E: B y A. Subrbol: cualquier estructura
Hermano: {B, C}, {F, G} conectada por debajo del raz.
Hojas: D, E, F, G C/nodo de un rbol es la raz de un
Altura del rbol: 3 subrbol que se define por el nodo y
Altura del Subrbol de B: 2 todos los descendientes del nodo.
Ejemplos de la terminologa
888
8 Nivel 1
Hijo
Nodo
Nodos
Sub
Sub arbol
Hoja
arbol
555 999 Padre
Derecho
Izquierdo
Hermanos
izquierdo
5 9 derecho
Nivel 2
333 666 15
15
15
3 6 15 Nivel 3
111 14
14
14 17
17
17
1 14 17 Nivel 4
9Elyessubarbol
5Los
El
Nivel 9nodos
el1:
son
Subabolhijo
8 hermanos
1,6,17,12
derecho
izquierdo
izquierdo
derecho de
son
de
dede
898nodos
8,
es es el
12
12
12
12 15
3hojas
arbol
elyes
Nivel es6el2:
arbolson
que
elhijo
5hijo
,hermanos
comienza
que9izquierdo
derechocon
comienza de
decon
9el
5 nodo
el 5
17
14
nodo
Nivel yes17el
4:151son
hijo
, 14hermanos
derecho
izquierdo
, 17 dede1515
REPRESENTACION DE UN ARBOL.
15
6 20
4 10 17 22
b) Por diagramas de conjuntos
15
6 20
10
4 17 22
c) Lineal 15(6(4(),10()),20(17(),22()))
nivel 1 2 3 4
15
6
d) Tabla de jerarquias 4
10
20
17
22
rbol Binario
rbol donde ningn nodo puede tener mas de 2 subrboles.
En cualquier nivel n, solo puede contener de 1 a 2n-1 nodos
rbol Completo: de Altura n es un rbol en el que para c/nivel,
del 1 al n, est lleno de nodos. Todos los nodos hoja a nivel n
ocupan posiciones a la izquierda.
rbol Lleno: tiene el mximo nmero de entradas para su altura:
2n. A Nivel k, tendr 2k1 nodos. (Nivel = Profundidad)
Lleno de Profundidad 3 = Nivel 2 => 22+11 nodos= 231= 7 nodos
rbol Degenerado: hay un solo nodo hoja (el 18) y cada nodo no
hoja tiene solo un hijo. Equivalente a una lista enlazada.
20 15
5
9 10 32
6 20
12
4 15 31 45
18 1 6 4 10 17 22
Degenerado de profundidad 4 Completo de profundidad 4 Lleno de profundidad 3
CONVERSION DE UN ARBOL GENERAL A ARBOL BINARIO
F A Z
X H
B Q M D
ARBOL BINARIO RESULTANTE
F A Z
X
H
B
Q
M D
IMPLEMENTACION COMPUTACIONAL
a)estatica.-Se emplea un arreglo unidimensional, las celdas que
almacenan nodos son a partir de la numero uno.
-Para un nodo que se encuentra en la celda i, el subrbol izquierdo
se localiza en la celda 2*i y el subrbol derecho en la celda 2*i+1.
ejemplo.-
T
A F
Z B Q
T A F Z B Q H
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
b) Dinamica.- empleo de estructuras enlazadas
izq I Z Q
der
PUNTERO
T Z
M L Q
Estructura del Nodo
del rbol Binario
class nodo
struct nodo {
{ int info;
int infoo; nodo izq, der;
struct nodo *izq; //Constructores
struct nodo *der; nodo (int Elem)
{
} info = Elem;
izq = der = null;
Typedef struct nodo Nodo;
}
Typedef Nodo *ArbolBinario; }
OPERACIONES BASICAS EN UN ARBOL BINARIO
CREACION
RECORRIDO.
A F
Z B Q
H
Recorrido del rbol
Recorrer el rbol significa que cada nodo sea procesado
una vez y solo una en un secuencia determinada.
Existen 2 enfoques generales
Recorrido en Profundidad: el proceso exige alcanzar las
profundidades de un camino desde la raz hacia el descendiente
mas lejano del primer hijo, antes de proseguir con el segundo.
Recorrido en Amplitud: el proceso se realiza horizontalmente
desde la raz a todos su hijos antes de pasar con la
descendencia de alguno de ellos.
1 2 3
2 3 1 3 1 2
Preorden RID EnOrden IRD PostOrden IDR
RaizIZQDER IZQRaizDER IZQDERRaiz
a) Preorden.-
1.-Procesar la informacin del nodo raiz.
2.-Recorrer el sub-arbol izquierdo en recursividad pre-orden.
3.- Recorrer el sub-arbol derecho en pre-orden.
T,A,Z,P,B,H,D,Q
raiz
T inicio preorden(raiz)
si raiz<> nulo
A F
procesar raiz->info
Z B
Q preorden(raiz->izq)
D
preorden(raiz->der)
H fin si
fin
T,A,Z,F,B,H,D,Q
//Preorden Recursivo del arbol
public void Preorden (nodo x)
{
if(x == null)
return;
else
{
System.out.print (x.info + " ");
Preorden (x.izq);
Preorden (x.der);
}
}
Recorrido PreOrden (RID)
void preOrden(ArbolBinario raz)
{ if(raiz)
{ visitar(raiz>dato);
preOrden(raiz>izq);
preOrden(raiz>der);
} void visitar(TipoElemento x)
} {printf( %i , x);}
4 10 17 22
b) EnOrden.-
1.-Recorrer el sub-arbol izquierdo en recursividad en-orden.
2.-Procesar la informacin del nodo raz.
3.- Recorrer el sub-arbol derecho en en-orden.
inicio enorden(raiz)
si raiz<> nulo
enorden(raiz->izq)
procesar raiz->info
enorden(raiz->der)
fin si
fin
Z, A,T,H,B,D,F,Q
//Inorden Recursivo del arbol
public void enorden (nodo x)
{
if(x == null)
return;
else
{
enorden (x.izq);
System.out.print(x.info + " ");
enorden (x.der);
}
}
Recorrido EnOrden (IRD)
void enOrden(ArbolBinario raz)
{ if(raiz)
{ enOrden(raiz>izq);
visitar(raiz>dato);
enOrden(raiz>der);
}
}
El recorrido en EnOrden del rbol 15
es el siguiente:
4, 6, 10, 15, 17, 20, 22 6 20
4 10 17 22
a) PostOrden.-
1.-Recorrer el sub-arbol izquierdo en recursividad post-orden.
2.- Recorrer el sub-arbol derecho en post-orden.
3.-Procesar la informacin del nodo raz.
inicio postorden(raiz)
si raiz<> nulo
postorden(raiz->izq)
procesar raiz->info
postorden(raiz->der)
fin si
fin
Z,A,H,D,B,Q,F,T
public void PostOrden (nodo x)
{
if(x == null)
return;
else
{
PostOrden (x.izq);
PostOrden (x.der);
System.out.print (x.info + " ");
}
}
Recorrido PostOrden (IDR)
void PostOrden(ArbolBinario raz)
{ if(raiz)
{ PostOrden(raiz>izq);
PostOrden(raiz>der);
visitar(raiz>dato);
}
}
El recorrido en PostOrden del 15
rbol es el siguiente:
4, 10, 6, 17, 22, 20, 15 6 20
4 10 17 22
Comparacion de Recorridos
PreOrden RID 18
PREORDEN:
Se recorre por el sub arbol izquierdo procesando la informacion.
Entra a la pila el subarbol derecho diferente a nulo.
Si al recorrer por la izq. Se encuentra nulo, entonces se saca de
la pila y se repite el proceso.
El algoritmo termina cuando se saca nulo de la pila o esta queda
vacia.
ENORDEN:
Se recorre por el sub arbol izquierdo introduciendo a la pila los
nodos hasta encontrar un sub arbol nulo..
Si al recorrer por la izq. Se encuentra nulo, entonces se saca de
la pila, se procesa la informacion y se repite el proceso
continuando con el sub arbol derecho.
El algoritmo termina cuando se saca nulo de la pila o esta queda
vacia.
Inicio preorden(raiz)
Cima = 1
Pila[cima] = nulo
Ptr = raiz
Mientras ptr <> nulo hacer
Mostrar ptr.info
Si ptr.der <> nulo entonces
Cima=cima+1
Pila[cima] = ptr.der
Fin_si
Si ptr.izq <> nulo entonces
Ptr = ptr^.izq
Sino
Ptr = pila[cima]
Cima=cima-1
Fin_si
Fin_mientras
Fin.
Inicio enorden(raiz)
Cima = 1
Pila[cima]=nulo
Ptr = raiz
Mientras ptr <> nulo hacer
Mientras ptr <> nulo hacer
Cima=cima+1
Pila[cima] = ptr
Ptr = ptr.izq
Fin_mientras
Ptr = pila[cima]
Cima=cima-1
Mostrar ptr .info
Si ptr.der <> nulo entonces
Ptr = ptr.der
Sino
Ptr = pila[cima]
Cima=cima-1
Fin_si
Fin_mientras
Fin.
POSTORDEN:
Se recorre por el sub arbol izquierdo introduciendo a
la pila los nodos hasta encontrar un sub arbol nulo, a
medida que se mete a la pila se debe marcar los nodos
que tienen sub arbol derecho.
Resultado:
20, 10, 30, 5, 15, 25
Amplitud
Inicio (raiz)
Ptr = raiz
final = 1
Inicio=1
cola[final] = Ptr
Mientras (no colavacia) hacer
ptr=cola[Inicio]
inicio++
Mostrar ptr.inf
Si ptr.izq <> nulo entonces
final=final+1
cola[final] = ptr.izq
Fin_si
devolver(Buscar(raiz.Izq,clave))
sino
devolver(Buscar(raiz.der,clave))
fin_si
fin_si
fin_si
Fin
Insertar un elemento
La insercin de un nuevo nodo en un rbol binario de
bsqueda debe realizarse de tal forma que se
mantengan las propiedades del rbol.
Inicio_adicion(raiz, clave)
Si (raiz=nulo) entonces
Pedir memoria en raiz
Raiz.info=clave
raiz.izq=raiz.der=nulo
Sino
Si (clave >raiz.info) entonces
Adicion (raiz.der, clave)
Sino
si (clave<raiz.info) entonces
Adicion(raiz.izq, clave)
fin si
Fin si
Fin si
Fin
Eliminar un elemento
3 posibilidades:
raiz
43
25 74
101
9 58
64
45
Clave = 43
inicio eliminacion(raiz,clave)
si raiz <>nulo entonces
si (clave=raiz.info) entonces
eli(raiz)
si no
si clave> raiz.info entonces
eliminacion (raiz.der,clave)
si no
eliminacion (raiz.izq,clave)
fin si
fin si
fin si
fin
inicio eli(raiz)
si(raiz.izq=nulo y raiz.der=nulo) entonces
retornar nulo
si no
si(raiz.izq=nulo y raiz.der<>nulo) entonces
retornar(raiz.der)
si no
si(raiz.izq<>nulo y raiz.der=nulo) entonces
retornar(raiz.izq)
si no
mm=menmay(raiz.der)
raiz.info=mm
eliminar(raiz.der,mm)
fin si
fin si
fin si
final
inicio menmay(raiz)
si raiz.izq=nulo entonces
retornar raiz.info
si no
menmay(raiz.izq)
fin si
final
raiz
30
11 53
71
5 35
mm=30
49
30
34
ARBOLES BALANCEADOS (AVL)
Un rbol AVL (llamado as por las iniciales de sus inventores: Adelson-
Velskii y Landis) es un rbol binario de bsqueda en el que para cada
nodo, las alturas de sus sub rboles izquierdo y derecho no difieren en
ms de 1.
raiz
15
18
26
32
41
50
60
15
6 20
4 10 17 22
raiz
30
11 53
71
5 35
mm=30
49
clave=35
30
Cada vez que insertamos o eliminamos un nodo en un rbol AVL
pueden suceder dos cosas:
que el rbol se mantenga como AVL
o que pierda esta propiedad.
Por definicin, para un rbol AVL, este valor debe ser -1, 0
1.
Equi = -1 Cuando la altura del sub arbol izquierdo es mayor
en 1 que la altura del sub arbol derecho
-1
37
1 21
18 0 42 0
20
5 0 0 51
20
0 18
2 0 14
12 0 37
21 0
adicion 30
ALGORITMOS DE ROTACION
Los reequilibrados se realizan mediante rotaciones, existe cuatro
posibles rotaciones que se puede aplicar.
Pt =pt1
Rotacin simple a la izquierda (SI):
Se trata del caso simtrico del anterior. Esta rotacin se usa cuando el
subrbol derecho de un nodo sea 2 unidades ms alto que el
izquierdo, es decir, cuando su equi sea de 2. Y adems, la raz del
subrbol derecho tenga un equi de 1, es decir, que est cargado a la
derecha.
Pt.der =pt1.izq Pt1.izq =pt
Pt =pt1
Rotacin doble a la derecha (DD):
Equi nodo actual equi del nodo derecho equi del nodo izquierdo Rotacin
-2 No importa -1 RSD
-2 No importa 1 RDD
2 -1 No importa RDI
2 1 No importa RSI
Reequilibrados en rboles AVL por borrado de un nodo
equi nodo actual equi del nodo derecho equi del nodo izquierdo Rotacin
-2 No importa -1 RSD
-2 No importa 0 RSD
-2 No importa 1 RDD
2 -1 No importa RDI
2 0 No importa RSI
2 1 No importa RSI