You are on page 1of 29

Unida d rbole Binario s s

rbole Generale Intuitivamente el concepto de rbol s s

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.

rbole Generale Nodos: conjunto finito de s s elementos.


6 4
Raiz=15

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

Terminolog Niv 0 Padre: tiene Nodos sucesores. a el Hijos: Nodos sucesores.


C G
2

Descendientes: Hijos de los hijos Ascendientes: los padre y abuelos

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

Equilibri en Binari o rbol o Factor de Equilibrio: diferencia de


altura entre los 2 subrboles de un nodo.

fe=hd rb Equilibrado: 1<fe<1. Ej: fe=3 hi. 2=1 ol


rb ol
4
1

Perfectament Equilibrado fe= e : 0.


1 5 1 7 1 5
0 1

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

(el 18) y cada nodo no lista enlazada.


1 5

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.

Estructur de a Datos del Binario


TipoElement dat o o struct *iz nodo q Typedef int struct *d TipoElemento Typedef nodo er } Nodo struct nodo Typedef ArbolBinari { Nodo* o

rbol
A A

Nodo Raz
C C

B B

D D

nu nu ll ll

E E

nu nu ll ll nul nul ll H H null null

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

Ejempl trivia nuevoArbol(ArbolBinario* o l Void ArbolBinario ramaIzq, raz,


ArbolBinari ramaDe TipoElemento o r)

x ,

Esper Esper an za an za Jesus Jesus

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

Recorrid PreOrde (RID void o n raz )


preOrden(ArbolBinario { if(raiz ) visitar(raiz>dato) { preOrden(raiz >izq) } preOrden(raiz >der) } )

void visitar(TipoElemento x) {printf( %i , x)}

El recorrido en PreOrden del rbol es el siguiente: 15, 6, 4, 10, 20, 17, 22


4

1 5 6 1 0 1 7 2 0 2 2

void enOrden(ArbolBinario { if(raiz ) enOrden(raiz { >izq) visitar(raiz>dato) } enOrden(raiz >der) }

Recorrid EnOrde (IRD o n raz )


)

El recorrido en EnOrden del es el siguiente: 4, 6, 10, 15, 17, 20, 22

rb ol
6 4 1 0

1 5 2 0 1 7 2 2

PostOrden(ArbolBinario { if(raiz ) PostOrden(raiz { >izq) PostOrden(raiz } >der) visitar(raiz>dato) }

Recorrid PostOrde (IDR voido raz n )


)

El recorrido en PostOrden rbol es el siguiente: 4, 10, 6, 17, 22, 20, 15

d el
6 4 1 0

1 5 2 0 1 7 2 2

Comparemo Recorrido s s
1 8

18, 12, 5, 9, PreOrden RID 28,

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

Profundida d u rbo Binari int profundidad (ArbolBinario l d e n o

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

de un rbol Binario de Bsqueda

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

Creacin de un rbol Binario de Bsqueda (cont.)

y4

Nod o {

Bsqueda en rbol de Bsqueda

*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)

Insertar en rboles de Bsqueda


Es una extensin de la operacin de Bsqueda
Si el rbol est vaco se inserta directamente SINO: Buscar en el rbol el lugar correcto de Insercin

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

Es una extensin de la operacin de bsqueda. Mantendr la estructura de rbol Binario de

Eliminar de un rbol Binario de Bsqueda

Bsqueda. al Padre del nodo a eliminar, su Se Asignar

Nieto)

1er: El Nodo a eliminar es Hoja o Hijo nico

nico 2 casos bien diferenciados Presenta descendiente. (El Abuelo se encargar del

2do: El nodo a borrar tiene sus dos hijos. Se Puede

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

Eliminar de un Binario rbol de Bsqued Bajaremos al 1er de a


1

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

/* Cambio de Campo Datos*/ (*act) > dato = a > dato


/* Al Abuelo p, se hace cargo de nieto IZQ*/

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.*/

AVL rbol Binario y : Ordenado Balanceado


Llamados rboles AVL (AdelsonVelskiiLandis) Se caracterizan porque la Altura B=hdhi : 1<=B<=1 Restringe la altura de cada uno de los Subrboles Se necesita un campo FE (Factor de Equilibrio) en cada struct nodo TipoElement dat { o o int fe *izq, struct nodo *der } Nodo

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

hizo la Insercin. 1. Insercin en el


Subrbol IZQ De la Rama IZQ de A 3. Insercin en el Subrbol DER De la Rama DER de A

Reestructuraci AV Hay 4 casos posibles tene en cuenta, segn n L a r donde


A A

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

le devuelve el equilibrio al Implica a A y su 3:

rbo l.

Soluciones simtricas: En c/caso, las ramas estn opuestas.

Rotacin Simple:Caso 2 y descendiente 3 nodos Rotacin Doble: Caso 4: Implica a los 1y

AVL Rotaci Simpl Luego de Insertarn Nodo A el rbol qued el : e desbalanceado.

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

Fe= apunt 2 ram IZ a a a Q

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

La solucin consiste en subir el 40, pender el 30 a su e 60 a y izquierda derech l su a. 2 3 n


3

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

You might also like