Professional Documents
Culture Documents
implica una estructura donde los datos se informacin modo que los elementos a relacionado entr s organizan de estn s e de travs de ramas.
Definicin recursiva: rbol es conjunto de nodos un Es vaco,que: o bien, Tiene un nodo raz del que descienden 0 o ms subrboles.
Ramas: conjunto finito de lneas dirigidas, que conectan nodos. Grado del Nodo: nmero de ramas descendentes con un nodo. Raz: primer nodo de un rbol no vaco. Camino: secuencia de nodos en los que c/nodo es adyacente al siguiente.
Solo existe 1 camino entre la Raz y un Nodo cualquier. La distancia de un Nodo a la Raz determina la rapidez de bsqueda.
1 5 2 0 1 0 1 7 2 2
Nodos: 15, 6, 20. Ramas(15, 6) (20, 17) Grado del 15= G(15)=2 G(10)=0 G(20)=2
A B D E
Niv el 1
de un nodo hijo.
Hermano s: 2 o mas nodos del mismo padre. Hojas: nodo sin hijos . Nivel de un nodo: distancia a la raz. Altura o profundidad de un rbol: La altura de del camino ms nivel de la hojaun rbol vaco es 0. Subrbol: cualquier largo conectada por debajo del estructura desde la raz es la raz de un C/nodo de un rbol ms uno. raz. subrbol que se define por el nodo y todos los descendientes del nodo.
F
Niv el
Padres: A B y C. Hijos: De A( B y C), de ( y E B Descendentes de B: D y D ) E Ascendientes de E: B y A. Hermano: {B, C}, {F, G} Hojas: D, E, F, G Altura del rbol: 3 Altura del Subrbol de B: 2
1 0 6
0
r bol Equilibrado
2 0
4
r bol
1 1 2 0 7 0 2 Perfectamente Equilibrado
2 0
rbo Binari rbol donde ningn nodo puede tener mas de 2 l o subrboles. nivel n, solo puede contener de 1 2n+1 En cualquier
nodo 1 a rbol Completo: de Altu ra n es un rbol en el que para s c/nivel, del 0 al n1, est lleno de nodos. Todos los nodos hoja a nivel n ocupan posiciones a la izquierda. rbolNivel k, tiene el 2k+1 nodos. (Nivelentradas para su Lleno: mximo nmero de = Profundidad 2n. altura: de Profundidad 3 = Nivel 2 => 22+11 nodos= 231= 7 tendr A Lleno 1 1)
nodos rbol Degenerado: hay un solo nodo hoja hoja tiene solo un hijo. Equ ivalente a una
5 9 1 2
4
1 8
1 0 6
2 0
1 5
3 2
6 4 5 4 1 0 1 7
2 0 2 2
3 1
1
Degenerado de pr ofundidad 4
3 Completo de profundidad 4
Lleno de profundidad 3
TAD rbol Binario: Especificacin en filmina Nodos del rbol (se especifica
siguiente) Tipo de Dato Operacione s Altura: de un rbol Borrar: Elimina del rbol a un nodo dado Bsqueda: Buscar un elemento en un rbol de Bsqueda Construir: crea un rbol con un elemento raz y dos ramas. Copiar: crear una copia del rbol CrearArbol: Inicia un rbol vaco Derecho: da la rama derecha de un rbol dado. Elementos: determina el nmero de elementos del rbol EsVacio: comprueba si el rbol tiene nodos Iguales: determinar si dos rboles son idnticos Insertar: inserta un nodo dentro de un rbol Izquierdo: da la rama izquierda de un rbol dado. Pertenece: Determina si un elemento pertenece a un rbol. Recorrer: el rbol de acuerdo algunos de los criterios Profundidad: determina la profundidad de un rbol dado Raiz:devuelve el nodo raz.
rbol
A A
Nodo Raz
C C
B B
D D
nu nu ll ll
E E
F F
nul nul ll
nu nu ll ll
G G
null null
nu nu ll ll
nul nul ll
nu nu ll ll
N N
null null
Void nuevoArbol(ArbolBinario* raz, ArbolBinario { *raiz=crearNodo(x) (*raz)>izq=ramaIzq TipoElemento x, ArbolBinario (*raz) ramaDer) } >der=ramaDer
ArbolBinario crearNodo(TipoElemento x) { ArbolBinario a a=(ArbolBinario) malloc(sizeof(Nodo)) a.dato=x a.Izq=a.Der=NULL } return a
Creaci de rbo n l l
ramaIz q,
rai z
a
nul nul ll x x null null
ArbolBinario raz, a1, a2 Pila pila nuevoArbol(&a1,NULL, Maria,NULL) nuevoArbol(&a2,NULL, Rodrigo,NULL) nuevoArbol(&raiz,a1, Esperanza,a2) Insertar(&pila, raz) nuevoArbol(&a1,NULL, Any,NULL) nuevoArbol(&a2,NULL, Abel,NULL) nuevoArbol(&raiz,a1, Jesus,a2) Insertar(&pila, raz) a2=quitar(&pila) a1=quitar(&pila) nuevoArbol(&raiz,a1, Esperanza,a2) rai z a 1
nu nu ll ll Mar null Mar null ia ia Espe Espe ra a nza nza
x ,
a 2
nul nul ll
Ro R dri o go d g o
null null
nul nul ll
An An y y
null null
nul nul ll
Abe Abe ll
null null
Recorrid de rbo Recorrer el rbol significa que cada nodo sea procesado l una vez yo una en un secuencia ldeterminada. solo
Existen en Profundidad: el proceso exige alcanzar las Recorrido 2 enfoques generales
profundidades de un camino desde la raz hacia el descendiente mas lejano del primer hijo, antes de proseguir Recorrido en An con el segundo. chura: el proceso se realiza desde la raz a todos su hijos antes horizontalmente de descendencia de alguno de ellos. pasar con la
1 2 3
Preorden RID RaizIZQ DER
2 1 3
EnOrden IRD IZQRaiz DER
3 1
PostOrden IDR IZQRaiz DER
1 5 6 1 0 1 7 2 0 2 2
rb ol
6 4 1 0
1 5 2 0 1 7 2 2
d el
6 4 1 0
1 5 2 0 1 7 2 2
Comparemo Recorrido s s
1 8
2 3 0, 5 1 2 2 8 EnOrden IRD 2 3 5 2 3 8, 5 5, 9, 12, 18, 0 5 20, 2 1 9 PostOrden 8, 8 IDR rbol Binario de Bsqueda 9, 5, 12, 20, el Ejemplo, dado Nodo Como del 35, un en rbol, datos de su Subrbolcualquiera IZQ son menores, y los del todos DER son mayores: I<R<D: Por esto, solo el los IRD, dar la secuencia ordenada del rbol. Subrb ol recorrid
raz) { if (! return 0 /*rbol vaco*/ raiz) else profundidadI = profundidad (raiz > { int izq) int profundidadD = profundidad der) (raz > if (profundidadI > profundidadD) return profundidadI + 1 else return profundidadD + 1 } }
Altura o profundidad de un rbol: nivel de la hoja del camino ms desde la raz ms uno. La altura de un rbol vaco es 0. larg o
Creacin
Se desean almacenar los nmeros 8, 3, 1, 20, 10, 5 y 4 en un rbol Binario de Bsqueda. La nica Regla es que I<R<D. Luego viene 3, es menor 8: a subrbol Inicialmente el rbol est vaco y la nica a Luego el 1, aser y aNodo Raz. 8 el va l IZQ opcin para el 8 es menor l l 3.
x y<
x
8 3
8 3 1
Z>
x
Se desean almacenar los nmeros 8, 3, 1, 20, 10, 5 en un rbol Binario rboles PROPIEDAD de los de Bsqueda. de Luegoson20, mayor al 8 No el Binarios nicos y depende orden en cual fuer Bsqueda: del el se on Asinsertando element los elementos. hasta insertar todos
los os
8 3 1 2 0 1 3 1 0 8 2 0 1 3 5 1 0 8 2 0 3 1 4 5 1 0 8 2 0
y4
Nod o {
*buscar(Nodo *raiz, TipoElemento buscado) if(! return /*rbol raiz) i (buscado==raiz>dato) return raiz 0 vaco*/ els e f (buscado<raiz>dato) els i return buscar(raiz>izq, e f els buscado) e return buscar(raiz>der, buscado)
void insertar (Nodo** raiz, TipoElemento dato ) { if (!(*raiz)) *raiz = else crearNodo(dato)> dato) if < (*raiz) (dato (&((*raiz) > izdo), inserta dato) r (&((*raiz) > dcho), else dato) } in sertar
Nieto)
nico 2 casos bien diferenciados Presenta descendiente. (El Abuelo se encargar del
Reemplazar el dato del nodo con el Menor de las Claves Mayores del Subrbol Derecho. Reemplazar el dato del nodo con el Mayor de las Claves Menores del Subrbol Izquierdo.
Bajaremos al 1er nodo de la Rama Izquierda
nodo la Eliminar el Nodo 8. 3 Rama Izquierda: Como la clave mayor est a Nodo su derecha, se contina bajando a derecha hasta encontrar un5 nodo sin rama DER: El . nodo 8 Hijo Se reemplaza elde por el 5. Queda un caso nico. El Abuelo (3) se encargar del
38 5 1 0
2 0
4 5 3 1 4 5 3 1 4 1 0 2 0
? ?
1 0
2 0
Eliminar un rbol Binario de de (Nodo** TipoElement Bsqueda void reemplazar(Nodo** void eliminar
{ r, dato) o if (!(*r)) puts("Nodo no encontrado") < (*r) > els if (dato e dato) dato ) els eliminar(&(*r) > izdo, if (dato >> dcho,dato) e eliminar(&(*r) (*r) /* Nodo els > dato)encontrado */ Nodo* q /* puntero al nodo a suprimir e */ { q = (*r) /* r es el ptr del nodo Padre */ if (q > izdo == NULL) (*r) = q > dcho else if (q > dcho == NULL) (*r) = q > izdo else /* tiene rama izquierda y derecha */ reemplazar(&q) } free(q)
IZQ*/
act) { Nodo* a, *p p = *act a = (*act) > izdo/* menores a while (a > dcho) p = a /* buscamos el Mayor a {
DER*/
a = a > dcho
if (p == (*act)) p > izdo = a > izdo else p > dcho = a > izdo (*act) = a }
/* Ojo: No puede tener nada a Derecha, pues abramos bajado en el while.*/
Considerando a un rbol de n nodos. Eficiencia en Bsquedas en rboles Equilibrados Para Optimizar las Bsquedas, se intentar mantener F(n)=Log n los rboles BinariosnOrdenados I<R<D y Equilibrados. En los dems: log <= F(n) <=n
nod o.
Inserci e AV La Insercin se hace siguiendo el camino de bsqueda n la altura de una rama, de manera que n L Puede aumentar
cambie el factor de equilibrio de dicho nodo.
mismo. h IZ 3Q 1
2 1
O Puede mejorar: Si al rbol X se le Inserta el 3, cuando se en E Proceso terminaresultar llega a la Rai o cuand termina el RebalanceoBalanceado. z l Perfectamente del o
0
0
Implica que se retornar por el camino de bsqueda para actualizar el FE de c/nodo Se puede llegar a Desbalancear (Altura=2) => ReBalanceo.
h DE R 3
h IZ 4Q 2 3 2 1
5
1
1 0 4
2 1
h DE R 3
1 7
4
1
1 7 1 5
0
2
0
2 0
1 0 rbol x + 5 Nodo
5
2 0
1
0
r bol x
s e
A A
2. Insercin en el Subrbol DER De la Rama IZQ de A 4. Insercin en el Subrbol DER De la Rama IZQ de A
A
A
A
A
Solucin: La ROTACION
rbo l.
n n 1
2 B
A
Segn que rama ha crecido, la Rotacin Simple puede ser de izquierdaizquierda (I o derechaderecha(DD). I) Movimientos de Ptrs.
n es ptro al nodo problema: IZQ (nuestro ej). N1 n>izq=n1
>der n1 >der=n DER. N1 apunta a n=n1 n>der=n1 >izq n1 >izq=n n=n1
C
C
n 1
A
n
0 B 0
rama DER
C
C
AVL: Rotacin
n apunta al nodo problema (Fe=2) n1 al hijo de n con problemas, n2 al d n e 1 Movimientos de Ptrs. hijo DI(nuestro ej). Derecha n1>izq=n2 izquierda >der
n2>der=n1 n>der=n2 >izq n2>izq=n ID:n=n2 izquierda derecha n1>der=n2 >izq n2>izq=n1 n>izq=n2 >der n=n 2 n2
Doble
n 2
n 1
4
n 3
3
n 1 n 2
0
0
6
6 4 01 4 0 0
0 6
0 6
0
0
>der=n
0
0
Luego de eliminar un nodo con cierta clave, el rbol resultante debe seguir siendo AVL El Algoritmo puede descomponerse en 1dos partes bien diferenciadas Eliminar el Nodo: segn estrategia que vimos
. 2 .
Eliminaci d u Nod AV n e n o L
1. rompe. 2. 1.
la en la Eliminacin de Nodo rbol de Bsqueda en el camino de bsqueda e sentido inverso: Balancear: se debe de Equilibrio n Arreglando el Factor seguir 2. Restaurar el Equilibrio all donde se