You are on page 1of 35

INTRODUCCIN

El siguiente trabajo trata sobre la estructura de datos no lineales llamada rbol. Esta estructura se usa principalmente para representar datos con una relacin jerrquica entre sus elementos, como por ejemplo registros, rboles genealgicos, y tablas de contenidos. Vamos a profundizar en un tipo especial de rbol llamado rbol binario, la cual puede ser implementado fcilmente en la computadora; aunque en un rbol puede parecer muy restrictivo. Tambin se va a ampliar sobre rboles ms generales y puntos con relacin a los rboles binarios; entre estos tenemos a la terminologa, los rboles binarios complementos, rboles binarios de bsqueda, bsqueda e insercin en rboles binarios de bsqueda, rboles generales, representacin de rboles generales en la computadora y correspondencia entre los rboles generales y rboles binarios.

CONCEPTO DE RBOLES
En ciencias de la computacin, un rbol es una estructura de datos ampliamente usada que emula la forma de un rbol (un conjunto de nodos conectados). Un nodo es la unidad sobre la que se construye el rbol y puede tener cero o mas nodos hijos conectados a l. Se dice que un nodo a es padre de un nodo b, si existe un enlace desde a hasta b (en ese caso, tambin decimos que b es hijo de a). Slo puede haber un nico nodo sin padres, que llamaremos raz. Un nodo que no tiene hijos se conoce como hoja. El rbol Tambin se define como una estructura de datos no lineal. Esta estructura se usa principalmente para representar datos con una relacin jerrquica entre sus elementos, como por ejemplo registros, rboles genealgicos y tablas de contenidos. Entre otros tenemos un tipo especial de de rbol que es, llamado rbol binario, que puede ser implementado fcilmente en la computadora.

DEFINICIN
Formalmente, podemos definir un rbol de la siguiente forma: Caso base: un rbol con slo un nodo (es a la vez raz del rbol y hoja).

Un

nuevo

rbol

partir

de

un

nodo nr y k rboles

de

races con elementos cada uno, puede construirse estableciendo una relacin padre-hijo entre nr y cada una de las races de los k rboles. El rbol resultante de nodos tiene como raz el nodo nr, los nodos son los hijos de nr y el conjunto de nodos hoja est formado por la unin de los k conjuntos hojas iniciales. A cada uno de los rboles Ai se les denota ahora subrboles de la raz. Una sucesin de nodos del rbol, de forma que entre cada dos nodos consecutivos de la sucesin haya una relacin de parentesco, decimos que es un recorrido rbol. Existen dos recorridos tpicos para listar los nodos de un rbol: primero en profundidad y primero en anchura. En el primer caso, se listan los nodos expandiendo el hijo actual de cada nodo hasta llegar a una hoja, donde se vuelve al nodo anterior probando por el siguiente hijo y as sucesivamente. En el segundo, por su parte, antes de listar los nodos de nivel n + 1 (a distancia n + 1aristas de la raz), se deben haber listado todos los de nivel n. Otros recorridos tpicos del rbol son preorden, postorden e inorden:

El recorrido en preorden, tambin llamado orden previo consiste en recorrer en primer lugar la raz y luego cada uno de los hijos en orden previo. El recorrido en inorden, tambin llamado orden simtrico (aunque este nombre slo cobra significado en los rboles binarios) consiste en recorrer en primer lugar A1, luego la raz y luego cada uno de los hijos simtrico. en orden

El recorrido en postorden, tambin llamado orden posterior consiste en recorrer en primer lugar cada uno de los hijos la raz. en orden posterior y por ltimo

Finalmente, puede decirse que esta estructura es una representacin del concepto de rbol en teora de grafos. Un rbol es un grafo conexo.

FORMAS DE REPRESENTACIN
Mediante un grafo:

Mediante un diagrama encolumnado:

a b d c e f
En la computacin se utiliza mucho una estructura de datos, que son los rboles binarios. Estos rboles tienen 0, 1 2 descendientes como mximo. El rbol de la figura anterior es un ejemplo vlido de rbol binario.

NOMENCLATURA SOBRE RBOLES


Vrtices: Los puntos de la grfica. Arista: Lneas que conectan a los vrtices. Trayectoria o ruta: Camino por el cual se viaja de un vrtice a otro a travs de una arista. Lazo: Arista que incide en un mismo vrtice. Grfica: Una grfica consiste en un conjunto de vrtices y un conjunto de aristas tal que cada arista se asocia con un par no ordenado de vrtices. Aristas Paralelas: Diferentes aristas que se asocian con el mismo par de vrtices. Vrtice aislado: Vrtice en el que no incide ninguna arista.

Grfica Simple: Es una grfica sin lazos ni aristas paralelas. Raz: es aquel elemento que no tiene antecesor Rama: arista entre dos nodos. Antecesor: un nodo X es antecesor de un nodo Y si por alguna de las ramas de X se puede llegar a Y. Sucesor: un nodo X es sucesor de un nodo Y si por alguna de las ramas de Y se puede llegar a X. Grado de un nodo: el nmero de descendientes directos que tiene. Hoja: nodo que no tiene descendientes: grado 0. Nodo interno: aquel que tiene al menos un descendiente. Nivel: nmero de ramas que hay que recorrer para llegar de la raz a un nodo. Altura: el nivel ms alto del rbol. Anchura: es el mayor valor del nmero de nodos que hay en un nivel.

Aclaraciones: se ha denominado a a la raz, pero se puede observar segn la figura que cualquier nodo podra ser considerado raz, basta con girar el rbol. Podra determinarse por ejemplo que b fuera la raz, y a y d los sucesores inmediatos de la raz b. Sin embargo, en las implementaciones sobre un computador que se realizan a continuacin es necesaria una jerarqua, es decir, que haya una nica raz.

TIPOS DE RBOLES

rboles Binarios rbol de bsqueda binario auto-balanceable rboles AVL rboles Rojo-Negro rbol AA rboles B rbol-B+ rbol-B* rboles Multicamino

RBOLES BINARIOS
Un rbol binario T se define como un conjunto finito de elementos, llamados nodos, de forma que:

T es vaco ( en cuyo caso se llama rbol nulo o rbol vaci) o T contiene un nodo distinguido R, llamado raz de T, y los restantes nodos de T forman un par ordenado de rboles binarios disjuntos T1 y T2.

Si T contiene una raz R, los dos rboles T1 y T2 se llaman, respectivamente, subrboles izquierdo y derecho de la raz R. Si T1 no es vaci, entonces su raz se llama sucesor izquierdo de R; y anlogamente, si T2 no es vaci, su raz se llama sucesor derecho de R. Observe que: B es un sucesor izquierdo y C un sucesor derecho del nodo A. El subrbol izquierdo de la raz A consiste en los nodos B, D, E y F, y el subrbol derecho de A consiste en los nodos C , G, H, J, K y L.

Cualquier nodo N de un rbol binario T tiene 0, 1 2 sucesores. Los nodos A,B,C y H tienen dos sucesores, los nodos R y J slo tienen un sucesor , y los nodos D,F, G,L y K no tienen sucesores. Los nodos sin sucesores se llaman nodos terminales. La definicin anterior del rbol binario T es recursiva, ya que T se define en trminos de los subrboles binarios T1 y T2. Esto significa, en particular, que cada nodo N de T contiene un subrbol izquierdo y uno derecho. Ms aun, si N es un nodo terminal, ambos rboles estn vacos. Dos rboles binarios T y T se dicen que son similares si tienen la misma estructura o, en otras palabras, si tienen la misma forma. Los rboles se dice que son copias si son similares y tienen los mismos contenidos en sus correspondientes nodos.

TIPOS DE RBOLES BINARIOS


1. Un rbol binario es un rbol con raz en el que cada nodo tiene como mximo dos hijos. 2. Un rbol binario lleno es un rbol en el que cada nodo tiene cero o dos hijos.

3. Un rbol binario perfecto es un rbol binario lleno en el que todas las hojas (vrtices con cero hijos) estn a la misma profundidad (distancia desde la raz, tambin llamada altura). 4. A veces un rbol binario perfecto es denominado rbol binario completo. Otros definen un rbol binario completo como un rbol binario lleno en el que todas las hojas estn a profundidad n o n-1, para alguna n. 5. Un rbol binario es un rbol en el que ningn nodo puede tener ms de dos subrboles. En un rbol binario cada nodo puede tener cero, uno o dos hijos (subrboles). Se conoce el nodo de la izquierda como hijo izquierdo y el nodo de la derecha como hijo derecho.

TERMINOLOGA
Frecuentemente se usa una terminologa de relaciones familiares para describir las relaciones entre los nodos de un rbol T. En particular, suponga que N es un nodo de T con un sucesor izquierdo S1 y un sucesor derecho S2. Entonces N se llama padre de S1 y S2. Anlogamente, S1 se llama el hijo izquierdo de N y S2 el hijo derecho de N. Es mas, S1 y S2 se dice que son hermanos. Cada nodo N de un rbol binario T, excepto la raz, tiene un nico padre, llamado predecesor de N. Los trminos descendientes y antecesores tienen su significado usual. As, un nodo L se dice descendiente de un nodo N (y N se dice antecesor de L) si existe una sucesin de hijos desde N hasta L. En particular, L se dice descendiente izquierdo o derecho de N dependiendo de si pertenece al subrbol izquierdo o al derecho de N. Tambin se usa esa terminologa de teora de grafos y de horticultura para un rbol binario T. especficamente, la lnea dibujada entre un nodo N de T y un sucesor suyo se llama arista, y una secuencia de aristas consecutivas se denomina camino. Un nodo terminal se llama hoja y un camino que termina en una hoja se llama rama. Cada nodo de un rbol binario T tiene asignado un nmero de nivel, de la forma que sigue. A la raz R del rbol T se le asigna el numero de nivel 0, y al resto de los nodos se le asigna un numero de nivel que es mayor en 1 que el numero de nivel de su padre. Ms aun, aquellos nodos con el mismo nmero de nivel se dice que pertenecen a la misma generacin. La profundidad o altura (o altura) de un rbol T es el nmero mximo de nodos de una rama de T. Equivale a 1 ms que el mayor numero de nivel de T. Dos rboles binarios T y T se dice que son similares si tienen la misma estructura o , en otras palabras, si tienen la misma forma. Los rboles se dice que son copias si son similares y tienen los mismos contenidos en sus correspondientes nodos. La terminologa de relaciones familiares, de teora de grafos y horticultura se usa para los rboles generales de la misma forma que para los rboles binarios. En particular, si N es un nodo con sucesores S 1, S 2,, S m, se dice que N es el padre de los S i , los S i son hijos de N y los S i son hermanos unos de otros. El termino "rbol" aparece, con significados ligeramente diferentes, en muchas reas diferentes de las matemticas y de la informtica. Aqu asumimos que nuestro rbol

general T esta enraizado, es decir, que T tiene un nodo distinguido R llamado raz de T; y que T esta ordenado, sea, que los hijos de cada nodo N de T tienen un orden especifico. Estas dos propiedades no se requieren siempre para definir un rbol.

EJEMPLO:
La figura muestra un rbol general T con 13 nodos, A,B,C,D,E,F,G,H,J,K,L,M,N A menos de que se indique lo contrario, la raz de un rbol T es el nodo en lo alto del diagrama, y los hijos de un nodo estn ordenados de izquierda a derecha. As, A es la raz de T y A tiene tres hijos; el primer hijo B, el segundo C y el tercero D. se observa que: 1. 2. 3. 4. El nodo C tiene tres hijos. Cada uno de los nodos B y K tienen dos hijos. Cada uno de los nodos D y H tiene un hijo. Los nodos E,F,G,L,J,M y N no tienen hijos.

El ltimo grupo de nodos, los que no tienen hijos, se llaman nodos terminales. Un rbol binario T no es un caso especial de un rbol general T: los rboles binarios y los rboles generales son dos cosas distintas. Las dos diferencias bsicas son:

Un rbol binario T puede estar vaci, pero un rbol general T no es vaci. Suponga que un nodo N tiene un solo hijo. Entonces el hijo se distingue por ser el izquierdo o el derecho en un rbol binario T, mientras que no existe esa distincin en un rbol general T.

RBOLES BINARIOS COMPLETOS:


Considere un rbol binario T. El rbol binario T se dice que es completo si todos sus niveles, excepto posiblemente el ultimo, tienen el mximo numero de nodos posibles y si todos lo9s nodos del ultimo nivel estn situados. Lo ms posible a la izquierda. As, solo existe un nico rbol completo Tn con exactamente n nodos. Representacin de los rboles generales en la computadora. Suponga que T es un rbol general. A menos que se diga lo contrario, T se mantendr en memoria en trminos de una representacin enlazada que usa tres arrays paralelos,

INFO, HIJO, (o ABAJO) Y HERM (u HORIZ), y una variable puntero RAIZ, tal como sigue. En primer lugar, cada nodo N de T corresponder a una posicin K tal que:

1. INFO [ K ] contiene los datos del nodo N.


2. HIJO [ K ] contiene la posicin del primer hijo de N. La condicin HIJO [ K ]= NULO indica que N no tiene hijos. 3. HERM [ K ] contiene la posicin del siguiente hermano de N. La condicin HERM [ K ] = NULO indica que N es el ultimo hijo de su padre.

EJEMPLO:
Considere el rbol general T de la figura (2) , suponga que los datos de los nodos de T se guardan en un Array INFO como en la figura (3) las relaciones estructurales de T se obtienen asignando valores al puntero RAIZ y a los Arrays HIJO y HERM tal y como sigue: 1. como la raz A de T se guarda en INFO [ 2 ], se y hace RAIZ:= 2. 2. Como el primer hijo de A es el nodo B, guardado en INFO [3 ], se hace HIJO [ 2 ]:= 3. como A no tiene hermanos, se hace HERM [ 2 ]= NULO. 3. Como el primer hijo de B es el nodo E, guardado en INFO [ 15 ], se hace HIJO [3]:= 15. como el nodo C es el siguiente hermano de B y C se guarda en INFO [ 4 ], se hace HERM [3]:=4. Y as sucesivamente. La figura (3) da los valores finales de HIJO y HERM. Observe que la lista DISP de nodos vacos se mantiene en el primer array, hijo, donde DISP = 1.

DECLARACIN DE RBOL BINARIO

Se definir el rbol con una clave de tipo entero (puede ser cualquier otra tipo de datos) y dos hijos: izquierdo (izq) y derecho (der). Para representar los enlaces con los hijos se utilizan punteros. El rbol vaco se representar con un puntero nulo. Un rbol binario puede declararse de la siguiente manera:
typedef struct tarbol { int clave; struct tarbol *izq,*der; } tarbol;

Otras declaraciones tambin aaden un enlace al nodo padre, pero no se estudiarn aqu.

RECORRIDOS SOBRE RBOLES BINARIOS


Se consideran dos tipos de recorrido: recorrido en profundidad y recorrido en anchura o a nivel. Puesto que los rboles no son secuenciales como las listas, hay que buscar estrategias alternativas para visitar todos los nodos. Recorridos en profundidad:

Recorrido en preorden: consiste en visitar el nodo actual (visitar puede ser simplemente mostrar la clave del nodo por pantalla), y despus visitar el subrbol izquierdo y una vez visitado, visitar el subrbol derecho. Es un proceso recursivo por naturaleza. Si se hace el recorrido en preorden del rbol de la figura 1 las visitas seran en el orden siguiente: a,b,d,c,e,f.
void preorden(tarbol *a) { if (a != NULL) { visitar(a); preorden(a->izq); preorden(a->der); } }

Recorrido en inorden u orden central: se visita el subrbol izquierdo, el nodo actual, y despus se visita el subrbol derecho. En el ejemplo de la figura 1 las visitas seran en este orden: b,d,a,e,c,f.
void inorden(tarbol *a) { if (a != NULL) { inorden(a->izq); visitar(a); inorden(a->der); } }

Recorrido en postorden: se visitan primero el subrbol izquierdo, despus el subrbol derecho, y por ltimo el nodo actual. En el ejemplo de la figura 1 el recorrido quedara as: d,b,e,f,c,a.
void postorden(arbol *a) { if (a != NULL) { postorden(a->izq); postorden(a->der); visitar(a); } }

La ventaja del recorrido en postorden es que permite borrar el rbol de forma consistente. Es decir, si visitar se traduce por borrar el nodo actual, al ejecutar este recorrido se borrar el rbol o subrbol que se pasa como parmetro. La razn para hacer esto es que no se debe borrar un nodo y despus sus subrboles, porque al borrarlo se pueden perder los enlaces, y aunque no se perdieran se rompe con la regla de manipular una estructura de datos inexistente. Una alternativa es utilizar una variable auxiliar, pero es innecesario aplicando este recorrido. Recorrido en amplitud: Consiste en ir visitando el rbol por niveles. Primero se visitan los nodos de nivel 1 (como mucho hay uno, la raz), despus los nodos de nivel 2, as hasta que ya no queden ms. Si se hace el recorrido en amplitud del rbol de la figura una visitara los nodos en este orden: a,b,c,d,e,f En este caso el recorrido no se realizar de forma recursiva sino iterativa, utilizando una cola (ver Colas) como estructura de datos auxiliar. El procedimiento consiste en encolar (si no estn vacos) los subrboles izquierdo y derecho del nodo extraido de la cola, y seguir desencolando y encolando hasta que la cola est vaca. En la codificacin que viene a continuacin no se implementan las operaciones sobre colas.
void amplitud(tarbol *a) { tCola cola; /* las claves de la cola sern de tipo rbol binario */ arbol *aux; if (a != NULL) { CrearCola(cola); encolar(cola, a); while (!colavacia(cola)) { desencolar(cola, aux); visitar(aux); if (aux->izq != NULL) encolar(cola, aux->izq); if (aux->der != NULL) encolar(cola, aux->der); } }

Por ltimo, considrese la sustitucin de la cola por una pila en el recorrido en amplitud. Qu tipo de recorrido se obtiene?

CONSTRUCCIN DE UN RBOL BINARIO


Hasta el momento se ha visto la declaracin y recorrido de un rbol binario. Sin embargo no se ha estudiado ningn mtodo para crearlos. A continuacin se estudia un mtodo para crear un rbol binario que no tenga claves repetidas partiendo de su recorrido en preorden e inorden, almacenados en sendos arrays. Antes de explicarlo se recomienda al lector que lo intente hacer por su cuenta, es sencillo cuando uno es capaz de construir el rbol viendo sus recorridos pero sin haber visto el rbol terminado. Partiendo de los recorridos preorden e inorden del rbol de la figura 1 puede determinarse que la raz es el primer elemento del recorrido en preorden. Ese elemento se busca en el array inorden. Los elementos en el array inorden entre izq y la raz forman el subrbol izquierdo. Asimismo los elementos entre der y la raz forman el subrbol derecho. Por tanto se tiene este rbol:

A continuacin comienza un proceso recursivo. Se procede a crear el subrbol izquierdo, cuyo tamao est limitado por los ndices izq y der. La siguiente posicin en el recorrido en preorden es la raz de este subrbol. Queda esto:

El subrbol b tiene un subrbol derecho, que no tiene ningn descendiente, tal y como indican los ndices izq y der. Se ha obtenido el subrbol izquierdo completo de la raz a, puesto que b no tiene subrbol izquierdo:

Despus seguir construyndose el subrbol derecho a partir de la raz a. La implementacin de la construccin de un rbol partiendo de los recorridos en preorden y en inorden puede consultarseaqu (en C).

RBOL BINARIO DE BSQUEDA:


Un rbol binario de bsqueda es aquel que es: Una estructura vaca o Un elemento o clave de informacin (nodo) ms un nmero finito -a lo sumo dosde estructuras tipo rbol, disjuntos, llamados subrboles y adems cumplen lo siguiente: Todas las claves del subrbol izquierdo al nodo son menores que la clave del nodo. Todas las claves del subrbol derecho al nodo son mayores que la clave del nodo. Ambos subrboles son rboles binarios de bsqueda.

Un ejemplo de rbol binario de bsqueda:

Al definir el tipo de datos que representa la clave de un nodo dentro de un rbol binario de bsqueda es necesario que en dicho tipo se pueda establecer una relacin de orden. Por ejemplo, suponer que el tipo de datos de la clave es un puntero (da igual a lo que apunte). Si se codifica el rbol en Pascal no se puede establecer una relacin de orden para las claves, puesto que Pascal no admite determinar si un puntero es mayor o menor que otro. En el ejemplo de la figura 5 las claves son nmeros enteros. Dada la raz 4, las claves del subrbol izquierdo son menores que 4, y las claves del subrbol derecho son mayores que 4. Esto se cumple tambin para todos los subrboles. Si se hace el recorrido de este rbol en orden central se obtiene una lista de los nmeros ordenada de menor a mayor. Cuestin: Qu hay que hacer para obtener una lista de los nmeros ordenada de mayor a menor? Una ventaja fundamental de los rboles de bsqueda es que son en general mucho ms rpidos para localizar un elemento que una lista enlazada. Por tanto, son ms rpidos para insertar y borrar elementos. Si el rbol est perfectamente equilibrado -esto es, la diferencia entre el nmero de nodos del subrbol izquierdo y el nmero de nodos del subrbol derecho es a lo sumo 1, para todos los nodos- entonces el nmero de comparaciones necesarias para localizar una clave es aproximadamente de logN en el peor caso. Adems, el algoritmo de insercin en un rbol binario de bsqueda tiene la ventaja -sobre los arrays ordenados, donde se empleara bsqueda dicotmica para localizar un elemento- de que no necesita hacer una reubicacin de los elementos de la estructura para que esta siga ordenada despus de la insercin. Dicho algoritmo funciona avanzando por el rbol escogiendo la rama izquierda o derecha en funcin de la clave que se inserta y la clave del nodo actual, hasta encontrar su ubicacin; por ejemplo, insertar la clave 7 en el rbol de la figura 5 requiere avanzar por el rbol hasta llegar a la clave 8, e introducir la nueva clave en el subrbol izquierdo a 8. El algoritmo de borrado en rboles es algo ms complejo, pero ms eficiente que el de borrado en un array ordenado. Ahora bien, suponer que se tiene un rbol vaco, que admite claves de tipo entero. Suponer que se van a ir introduciendo las claves de forma ascendente. Ejemplo: 1,2,3,4,5,6. Se crea un rbol cuya raz tiene la clave 1. Se inserta la clave 2 en el subrbol derecho de 1. A continuacin se inserta la clave 3 en el subrbol derecho de 2. Continuando las inserciones se ve que el rbol degenera en una lista secuencial, reduciendo drsticamente su eficacia para localizar un elemento. De todas formas es poco probable que se de un caso de este tipo en la prctica. Si las claves a introducir llegan de forma ms o menos aleatoria entonces la implementacin de

operaciones sobre un rbol binario de bsqueda que vienen a continuacin son en general suficientes. Existen variaciones sobre estos rboles, como los AVL o Red-Black (no se tratan aqu), que sin llegar a cumplir al 100% el criterio de rbol perfectamente equilibrado, evitan problemas como el de obtener una lista degenerada.

OPERACIONES BSICAS SOBRE RBOLES BINARIOS DE BSQUEDA


Bsqueda

Si el rbol no es de bsqueda, es necesario emplear uno de los recorridos anteriores sobre el rbol para localizarlo. El resultado es idntico al de una bsqueda secuencial. Aprovechando las propiedades del rbol de bsqueda se puede acelerar la localizacin. Simplemente hay que descender a lo largo del rbol a izquierda o derecha dependiendo del elemento que se busca.
boolean buscar(tarbol *a, int elem) { if (a == NULL) return FALSE; else if (a->clave < elem) return buscar(a->der, elem); else if (a->clave > elem) return buscar(a->izq, elem); else return TRUE; }

Insercin

La insercin tampoco es complicada. Es ms, resulta prcticamente idntica a la bsqueda. Cuando se llega a un rbol vaco se crea el nodo en el puntero que se pasa como parmetro por referencia, de esta manera los nuevos enlaces mantienen la coherencia. Si el elemento a insertar ya existe entonces no se hace nada.
void insertar(tarbol **a, int elem) { if (*a == NULL) { *a = (arbol *) malloc(sizeof(arbol)); (*a)->clave = elem; (*a)->izq = (*a)->der = NULL; } else if ((*a)->clave < elem) insertar(&(*a)->der, elem); else if ((*a)->clave > elem) insertar(&(*a)->izq, elem); }

Borrado

La operacin de borrado si resulta ser algo ms complicada. Se recuerda que el rbol debe seguir siendo de bsqueda tras el borrado. Pueden darse tres casos, una vez encontrado el nodo a borrar:

1. El nodo no tiene descendientes. Simplemente se borra.

2. El nodo tiene al menos un descendiente por una sola rama. Se borra dicho
nodo, y su primer descendiente se asigna como hijo del padre del nodo borrado. Ejemplo: en el rbol de la figura 5 se borra el nodo cuya clave es

El rbol resultante es:

El nodo tiene al menos un descendiente por cada rama. Al borrar dicho nodo es necesario mantener la coherencia de los enlaces, adems de seguir manteniendo la estructura como un rbol binario de bsqueda. La solucin consiste en sustituir la informacin del nodo que se borra por el de una de las hojas, y borrar a continuacin dicha hoja. Puede ser cualquier hoja? No, debe ser la que contenga una de estas dos claves:

La mayor de las claves menores al nodo que se borra. Suponer que se quiere borrar el nodo 4 del rbol de la figura 5. Se sustituir la clave 4 por la clave 2. La menor de las claves mayores al nodo que se borra. Suponer que se quiere borrar el nodo 4 del rbol de la figura 5. Se sustituir la clave 4 por la clave 5.

El algoritmo de borrado que se implementa a continuacin realiza la sustitucin por la mayor de las claves menores, (aunque se puede escoger la otra opcin sin prdida de generalidad). Para lograr esto es necesario descender primero a la izquierda del nodo que se va a borrar, y despus avanzar siempre a la derecha hasta encontrar un nodo hoja. A continuacin se muestra grficamente el proceso de borrar el nodo de clave 4:

Codificacin: el procedimiento sustituir es el que desciende por el rbol cuando se da el caso del nodo con descencientes por ambas ramas.
void borrar(tarbol **a, int elem) { void sustituir(tarbol **a, tarbol **aux); tarbol *aux; if (*a == NULL) /* no existe la clave */ return; if ((*a)->clave < elem) borrar(&(*a)->der, elem); else if ((*a)->clave > elem) borrar(&(*a)->izq, elem); else if ((*a)->clave == elem) { aux = *a; if ((*a)->izq == NULL) *a = (*a)->der; else if ((*a)->der == NULL) *a = (*a)->izq; else sustituir(&(*a)->izq, &aux); /* se sustituye por la mayor de las menores */ } } free(aux);

RBOL BINARIO DE BSQUEDA AUTO-BALANCEABLE


En ciencias de la computacin, un rbol binario de bsqueda autobalanceable o equilibrado es un rbol binario de bsqueda que intenta mantener su altura, o el nmero de niveles de nodos bajo la raz, tan pequeos como sea posible en todo momento, automticamente. Esto es importante, ya que muchas operaciones en un rbol de bsqueda binaria tardan un tiempo proporcional a la altura del rbol, y los rboles binarios de bsqueda ordinarios pueden tomar alturas muy grandes en situaciones normales, como cuando las claves son insertadas en orden. Mantener baja la altura se consigue habitualmente realizando transformaciones en el rbol, como la rotacin de rboles, en momentos clave. Tiempos para varias operaciones en trminos del nmero de nodos en el rbol n:

Operacin
Bsqueda Insercin Eliminacin Iteracin en orden

Tiempo en cota superior asinttica


O(log n) O(log n) O(log n) O(n)

Para algunas implementaciones estos tiempos son el peor caso, mientras que para otras estn amortizados.

TERMINOLOGA
Un rbol rojo-negro es un tipo especial de rbol binario usado en informtica para organizar informacin compuesta por datos comparables (como por ejemplo nmeros). En los rboles rojo-negro las hojas no son relevantes y no contienen datos. A la hora de implementarlo en un lenguaje de programacin, para ahorrar memoria, un nico nodo (nodo-centinela) hace de nodo hoja para todas las ramas. As, todas las referencias de los nodos internos a las hojas van a parar al nodo centinela. En los rboles rojo-negro, como en todos los rboles binarios de bsqueda, es posible moverse ordenadamente a travs de los elementos de forma eficiente si hay forma de localizar el padre de cualquier nodo. El tiempo de desplazarse desde la raz hasta una hoja a travs de un rbol equilibrado que tiene la mnima altura posible es de O(log n).

PROPIEDADES

Un ejemplo de rbol rojo-negro Un rbol rojo-negro es un rbol binario de bsqueda en el que cada nodo tiene un atributo de color cuyo valor es o bien rojo o bien negro. Adems de los requisitos impuestos a los rboles binarios de bsqueda convencionales, se deben satisfacer los siguientes para tener un rbol rojo-negro vlido:

1. Todo nodo es o bien rojo o bien negro. 2. La raz es negra. 3. Todas las hojas son negras (las hojas son los hijos nulos).
4. Los hijos de todo nodo rojo son negros (tambin llamada "Propiedad del rojo"). 5. Cada camino simple desde un nodo a una hoja descendiente contiene el mismo nmero de nodos negros, ya sea contando siempre los nodos negros nulos, o bien no contndolos nunca (el resultado es equivalente). Tambin es llamada "Propiedad del camino", y al nmero de nodos negros de cada camino, que es constante para todos los caminos, se le denomina "Altura negra del rbol", y por tanto el camino no puede tener dos rojos seguidos.

6. El camino ms largo desde la raz hasta una hoja no es ms largo que 2 veces el
camino ms corto desde la raz del rbol a una hoja en dicho rbol. El resultado es que dicho rbol est aproximadamente equilibrado. Dado que las operaciones bsicas como insertar, borrar y encontrar valores tienen un peor tiempo de bsqueda proporcional a la altura del rbol, esta cota superior de la altura permite a los rboles rojo-negro ser eficientes en el peor caso, de forma contraria a lo que sucede en los rboles binarios de bsqueda. Para ver que estas propiedades garantizan lo dicho, basta ver que ningn camino puede tener 2 nodos rojos seguidos debido a la propiedad 4. El camino ms corto posible tiene todos sus nodos negros, y el ms largo alterna entre nodos rojos y negros. Como todos los caminos mximos tienen el mismo nmero de nodos negros, por la propiedad 5, esto muestra que no hay ningn camino que pueda tener el doble de longitud que otro camino. En muchas presentaciones de estructuras arbreas de datos, es posible para un nodo tener solo un hijo y las hojas contienen informacin. Es posible presentar los rboles rojonegro en este paradigma, pero cambian algunas de las propiedades y se complican los algoritmos. Por esta razn, este artculo utilizan hojas nulas, que no contienen informacin y simplemente sirven para indicar dnde el rbol acaba, como se mostr antes. Habitualmente estos nodos son omitidos en las representaciones, lo cual da como resultado un rbol que parece contradecir los principios expuestos antes, pero que realmente no los contradice. Como consecuencia de esto todos los nodos internos tienen dos hijos, aunque uno o ambos nodos podran ser una hoja nula. Otra explicacin que se da del rbol rojo-negro es la tratarlo como un rbol binario de bsqueda cuyas aristas, en lugar de nodos, son coloreadas de color rojo o negro, pero esto no produce ninguna diferencia. El color de cada nodo en la terminologa de este artculo corresponde al color de la arista que une el nodo a su padre, excepto la raz, que es siempre negra por la propiedad 2 donde la correspondiente arista no existe.

USOS Y VENTAJAS
Los rboles rojo-negro ofrecen un peor caso con tiempo garantizado para la insercin, el borrado y la bsqueda. No es esto nicamente lo que los hace valiosos en aplicaciones sensibles al tiempo como las aplicaciones en tiempo real, sino que adems son apreciados para la construccin de bloques en otras estructuras de datos que garantizan un peor caso. Por ejemplo, muchas estructuras de datos usadas engeometra computacional pueden basarse en rboles rojo-negro. El rbol AVL es otro tipo de estructura con O(log n) tiempo de bsqueda, insercin y borrado. Est equilibrado de forma ms rgida que los rboles rojo-negro, lo que provoca que la insercin y el borrado sean ms lentos pero la bsqueda y la devolucin del resultado de la misma ms veloz. Los rboles rojo-negro son particularmente valiosos en programacin funcional, donde son una de las estructuras de datos persistentes ms comnmente utilizadas en la construccin de arrays asociativos y conjuntos que pueden retener versiones previas tras mutaciones. La versin persistente del rbol rojo-negro requiere un espacio O(log n) para cada insercin o borrado, adems del tiempo. Los rboles rojo-negro son isomtricos a los rboles 2-3-4. En otras palabras, para cada rbol 2-3-4, existe un rbol correspondiente rojo-negro con los datos en el mismo orden. La insercin y el borrado en rboles 2-3-4 son tambin equivalentes a los cambios de

colores y las rotaciones en los rboles rojo-negro. Esto los hace ser una herramienta til para la comprensin del funcionamiento de los rboles rojo-negro y por esto muchos textos introductorios sobre algoritmos presentan los rboles 2-3-4 justo antes que los rboles rojo-negro, aunque frecuentemente no sean utilizados en la prctica.

RBOL ROJO-NEGRO
Un rbol rojo negro es un tipo abstracto de datos, concretamente es un rbol binario de bsqueda equilibrado, una estructura de datosutilizada en informtica y ciencias de la computacin. La estructura original fue creada por Rudolf Bayer en 1972, que le dio el nombre de rboles-B binarios simtricos, pero tom su nombre moderno en un trabajo de Leo J. Guibas y Robert Sedgewick realizado en 1978. Es complejo, pero tiene un buen peor caso de tiempo de ejecucin para sus operaciones y es eficiente en la prctica. Puede buscar, insertar y borrar en un tiempo O(log n), donde n es el nmero de elementos del rbol. Sera ideal exponer la especificacin algebraica completa de este tipo abstracto de datos (TAD) escrita en algn lenguaje de especificacin deTADs como podra ser Maude; sin embargo, la complejidad de la estructura hace que la especificacin quede bastante ilegible, y no aportara nada. Por tanto, explicaremos su funcionamiento con palabras, esquemas e implementaciones de funciones en el lenguaje de programacin C.

RBOL AA
En informtica un rbol AA es un tipo de rbol binario de bsqueda autobalanceable utilizado para almacenar y recuperar informacin ordenada de manera eficiente. Los rboles AA reciben el nombre de su inventor, Arne Andersson. Los rboles AA son una variacin del rbol rojo-negro, que a su vez es una mejora del rbol binario de bsqueda. A diferencia de los rboles rojo-negro, los nodos rojos en un rbol AA slo pueden aadirse como un hijo derecho. En otras palabras, ningn nodo rojo puede ser un hijo izquierdo. De esta manera se simula un rbol 2-3 en lugar de un rbol 2-3-4, lo que simplifica las operaciones de mantenimiento. Los algoritmos de mantenimiento para un rbol rojo-negro necesitan considerar siete diferentes formas para balancear adecuadamente el rbol:

En un rbol AA, al cumplirse el estricto requisito de que slo los enlaces derechos pueden ser rojos, slo es necesario considerar dos formas:

ROTACIONES DE BALANCEO

En general, los rboles AA se implementan con la idea de un nivel en lugar de la de un color, a diferencia de los rboles rojo-negro. Cada nodo tiene un campo nivel y se deben cumplir las siguientes condiciones para que el rbol sea vlido: 1. 2. 3. 4. 5. El nivel de un nodo hoja es uno. El nivel de un hijo izquierdo es estrictamente menor que el de su padre. El nivel de un hijo derecho es menor o igual que el de su padre. El nivel de un nieto derecho es estrictamente menor que el de su abuelo. Cada nodo de nivel mayor que uno debe tener dos hijos.

Slo se necesitan dos operaciones para mantener el equilibrio en un rbol AA. Estas operaciones se llaman torsin (skew) y divisin (split). La torsin es una rotacin derecha que se realiza cuando una insercin o un borrado genera un enlace horizontal izquierdo, puede pensarse como un enlace rojo izquierdo en el contexto del rbol rojo-negro. La divisin es una rotacin izquierda condicional que tiene lugar cuando una insercin o un borrado crea dos enlaces horizontales derechos, lo que de nuevo se corresponde con dos enlaces rojos consecutivos en el contexto de los rboles rojo-negro.
function skew is input: T, a node representing an AA tree that needs to be rebalanced. output: Another node representing the rebalanced AA tree. if nil(T) then return Nil else if level(left(T)) == level(T) then Swap the pointers of horizontal left links. L = left(T) left(T) := right(L) right(L) := T return L else return T end if end function

Torsion:

function split is input: T, a node representing an AA tree that needs to be rebalanced. output: Another node representing the rebalanced AA tree. if nil(T) then

return Nil else if level(T) == level(right(right(T))) then We have two horizontal right links. Take the middle node, elevate it, and return it. R = right(T) right(T) := left(R) left(R) := T level(R) := level(R) + 1 return R else return T end if end function

INSERCIN La insercin comienza con la bsqueda normal en un rbol binario y su procedimiento de insercin. Despus, a medida que se desenrolla la pila de llamadas, es fcil comprobar la validez del rbol y realizar las rotaciones que se precisen. Si aparece un enlace horizontal izquierdo, se realiza una torsin, y si aparecen dos enlaces horizontales derechos, se realiza una divisin, posiblemente incrementando el nivel del nuevo nodo raz del subrbol correspondiente. Observe que el cdigo de muestra realiza un incremento de nivel(T). Lo que hace necesario continuar comprobando la validez del rbol a medida que las modificaciones suben desde las hojas.
function insert is input: X, the value to be inserted, and T, the root of the tree to insert it into. output: A balanced version T including X. Do the normal binary tree insertion procedure. Set the result of the recursive call to the correct child in case a new node was created or the root of the subtree changes. if nil(T) then Create a new leaf node with X. return node(X, 1, Nil, Nil) else if X < value(T) then

left(T) := insert(X, left(T)) else if X > value(T) then right(T) := insert(X, right(T)) end if Note that the case of X == value(T) is unspecified. As given, an insert will have no effect. The implementor may desire different behavior. Perform skew and then split. or not a rotation will occur or not are inside of the procedures, as given above. T := skew(T) T := split(T) return T end function The conditionals that determine whether

BORRADO
Como en la mayora de rboles binarios balanceados, el borrado de un nodo interno puede convertirse en el borrado de un nodo hoja al intercambiar el nodo interno bien con su predecesor o sucesor ms prximo, dependiendo del que est en el rbol o de los deseos del implementador. Para recuperar un predecesor simplemente se debe seguir un enlace izquierdo y despus todos los enlaces derechos restantes. De forma similar, el sucesor se puede encontrar al ir una vez a la derecha una vez y a la izquierda hasta que se encuentre un puntero nulo. Dada la propiedad de los rboles AA de que todos los nodos de un nivel superior a uno tienen dos hijos, el nodo sucesor o predecesor tendr nivel 1, haciendo que su eliminado sea trivial. Para re-equilibrar un rbol existen diferentes aproximaciones. La que describi Andersson en su publicacin original es la ms simple, y se describir aqu, aunque implementaciones reales pueden optar por un enfoque ms optimizado. Tras un borrado, el primer paso para mantener la validez es reducir el nivel de todos los nodos cuyos hijos estn dos niveles por debajo de ellos, o a los que les faltan hijos. Despus, todo el nivel debe ser torsionado y dividido. Esta aproximacin se ha visto favorecida por el hecho de que se basa en tres pasos independientes y fciles de entender: 1. Decrementar el nivel, si es necesario. 2. Torsionar el nivel. 3. Dividir el nivel. Sin embargo, debemos torsionar y dividir todo el nivel en lugar de un solo nodo lo que complica nuestro cdigo.
function delete is

input: X, the value to delete, and T, the root of the tree from which it should be deleted. output: T, balanced, without the value X. if X > value(T) then right(T) := delete(X, right(T)) else if X < value(T) then left(T) := delete(X, left(T)) else If we're a leaf, easy, otherwise reduce to leaf case. if leaf(T) then return Nil else if nil(left(T)) then L := successor(T) right(T) := delete(L, right(T)) value(T) := L else L := predecessor(T) left(T) := delete(L, left(T)) value(T) := L end if end if Rebalance the tree. Decrease the level of all nodes in this level if necessary, and then skew and split all nodes in the new level. T := decrease_level(T) T := skew(T) right(T) := skew(right(T)) right(right(T)) := skew(right(right(T))) T := split(T) right(T) := split(right(T)) return T end function function decrease_level is input: T, a tree for which we want to remove links that skip levels. output: T with its level decreased. should_be = min(level(left(T)), level(right(T))) + 1 if should_be < level(T) then level(T) := should_be if should_be < level(right(T)) then level(right(T)) := should_be end if end if return T end function

Un buen ejemplo de borrado por este algoritmo est presente en la publicacin de Andersson. RENDIMIENTO El rendimiento de un rbol AA es equivalente al de un rbol rojo-negro. Un rbol AA realiza ms rotaciones que un rbol red-black, pero la mayor sencillez de sus algoritmos tiende a hacerlos ms rpidos, y estos factores se compensan resultando en un rendimiento similar. Un rbol rojo-negro es ms constante en su rendimiento que un rbol AA, pero un rbol AA tiende a ser ms llano lo que produce unos tiempos de bsqueda ligeramente ms pequeos.

RBOL-B

Ejemplo de rbol B. En las ciencias de la computacin, los rboles-B B-rboles son estructuras de datos de rbol que se encuentran comnmente en las implementaciones de bases de datos y sistemas de archivos. Los rboles B mantienen los datos ordenados y las inserciones y eliminaciones se realizan en tiempo logartmico amortizado.

DEFINICIN
La idea tras los rboles-B es que los nodos internos deben tener un nmero variable de nodos hijo dentro de un rango predefinido. Cuando se inserta o se elimina un dato de la estructura, la cantidad de nodos hijo vara dentro de un nodo. Para que siga mantenindose el nmero de nodos dentro del rango predefinido, los nodos internos se juntan o se parten. Dado que se permite un rango variable de nodos hijo, los rboles-B no necesitan rebalancearse tan frecuentemente como los rboles binarios de bsqueda autobalanceables, pero por otro lado pueden desperdiciar memoria, porque los nodos no permanecen totalmente ocupados. Los lmites superior e inferior en el nmero de nodos hijo son definidos para cada implementacin en particular. Por ejemplo, en un rbol-B 23 (A menudo simplemente llamado rbol 2-3 ), cada nodo slo puede tener 2 3 nodos hijo. Un rbol-B se mantiene balanceado porque requiere que todos los nodos hoja se encuentren a la misma altura. Los rboles B tienen ventajas sustanciales sobre otras implementaciones cuando el tiempo de acceso a los nodos excede al tiempo de acceso entre nodos. Este caso se da usualmente cuando los nodos se encuentran en dispositivos de almacenamiento

secundario como losdiscos rgidos. Al maximizar el nmero de nodos hijo de cada nodo interno, la altura del rbol decrece, las operaciones para balancearlo se reducen, y aumenta la eficiencia. Usualmente este valor se coloca de forma tal que cada nodo ocupe un bloque de disco, o un tamao anlogo en el dispositivo. Mientras que los rboles B 2-3 pueden ser tiles en la memoria principal, y adems ms fciles de explicar, si el tamao de los nodos se ajustan para caber en un bloque de disco, el resultado puede ser un rbol B 129-513. Los creadores del rbol B, Rudolf Bayer y Ed McCreight, no han explicado el significado de la letra B de su nombre. Se cree que la B es debalanceado, dado que todos los nodos hoja se mantienen al mismo nivel en el rbol. La B tambin puede referirse a Bayer, o a Boeing, porque sus creadores trabajaban en el Boeing Scientific Research Labs en ese entonces.

DEFINICIN BREVE
B-rbol es un rbol de bsqueda que puede estar vaco o aquel cuyos nodos pueden tener varios hijos, existiendo una relacin de orden entre ellos, tal como muestra el dibujo. Un rbol-B de orden M (el mximo nmero de hijos que puede tener cada nodo) es un rbol que satisface las siguientes propiedades: Cada nodo tiene como mximo M hijos. Cada nodo (excepto raz y hojas) tiene como mnimo M/2 hijos. La raz tiene al menos 2 hijos si no es un nodo hoja. Todos los nodos hoja aparecen al mismo nivel. Un nodo no hoja con k hijos contiene k-1 elementos almacenados. Los hijos que cuelgan de la raz (r1, , rm) tienen que cumplir ciertas condiciones: El primero tiene valor menor que r1. El segundo tiene valor mayor que r1 y menor que r2, etc. El ltimo hijo tiene valor mayor que rm.

ALTURA: EL MEJOR Y EL PEOR CASO


En el mejor de los casos,la altura de un rbol-B es: logMn En el peor de los casos,la altura de un rbol-B es: Donde M es el nmero mximo de hijos que puede tener un nodo.

ESTRUCTURA DE LOS NODOS


Cada elemento de un nodo interno acta como un valor separador, que lo divide en subrboles. Por ejemplo, si un nodo interno tiene tres nodos hijo, debe tener dos valores separadores o elementos a1 y a2. Todos los valores del subrbol izquierdo deben ser menores a a1, todos los valores del subrbol del centro deben estar entre a1 y a2, y todos los valores del subrbol derecho deben ser mayores a a2.

Los nodos internos de un rbol B, es decir los nodos que no son hoja, usualmente se representan como un conjunto ordenado de elementos y punteros a los hijos. Cada nodo interno contiene un mximo de U hijos y, con excepcin del nodo raz, un mnimo de L hijos. Para todos los nodos internos exceptuando la raz, el nmero de elementos es uno menos que el nmero de punteros a nodos. El nmero de elementos se encuentra entre L-1 y U-1. El nmero U debe ser 2L o 2L-1, es decir, cada nodo interno est por lo menos a medio llenar. Esta relacin entre Uy L implica que dos nodos que estn a medio llenar pueden juntarse para formar un nodo legal, y un nodo lleno puede dividirse en dos nodos legales (si es que hay lugar para subir un elemento al nodo padre). Estas propiedades hacen posible que el rbol B se ajuste para preservar sus propiedades ante la insercin y eliminacin de elementos. Los nodos hoja tienen la misma restriccin sobre el nmero de elementos, pero no tienen hijos, y por tanto carecen de punteros. El nodo raz tiene lmite superior de nmero de hijos, pero no tiene lmite inferior. Por ejemplo, si hubiera menos de L-1 elementos en todo el rbol, la raz sera el nico nodo del rbol, y no tendra hijos. Un rbol B de altura n+1 puede contener U veces por elementos ms que un rbol B de profundidad n, pero el costo en la bsqueda, insercin y eliminacin crece con la altura del rbol. Como todo rbol balanceado, el crecimiento del costo es ms lento que el del nmero de elementos. Algunos rboles balanceados guardan valores slo en los nodos hoja, y por lo tanto sus nodos internos y nodos hoja son de diferente tipo. Los rboles B guardan valores en cada nodo, y pueden utilizar la misma estructura para todos los nodos. Sin embargo, como los nodos hoja no tienen hijos, una estructura especial para stos mejora el funcionamiento.

class nodo rbol B en c++


#include <iostream.h> #include <stdlib.h> #define TAMANO 1000 struct stclave { int valor; long registro; };

[editar]

class bnodo { public: bnodo (int nClaves); // Constructor ~bnodo (); // Destructor private: int clavesUsadas;

stclave *clave; bnodo **puntero; bnodo *padre; friend class btree; };

ALGORITMOS BSQUEDA
La bsqueda es similar a la de los rboles binarios. Se empieza en la raz, y se recorre el rbol hacia abajo, escogiendo el sub-nodo de acuerdo a la posicin relativa del valor buscado respecto a los valores de cada nodo. Tpicamente se utiliza la bsqueda binaria para determinar esta posicin relativa.

PROCEDIMIENTO

ejemplo2 insercin en rbol B Situarse en el nodo raz. (*) Comprobar si contiene la clave a buscar. Encontrada fin de procedimiento. No encontrada: Si es hoja no existe la clave. En otro caso el nodo actual es el hijo que corresponde: La clave a buscar k < k1: hijo izquierdo. La clave a buscar k > ki y k < ki+1 hijo isimo. Volver a paso 2(*).

INSERCIN
Todas las inserciones se hacen en los nodos hoja. Realizando una bsqueda en el rbol, se halla el nodo hoja en el cual debera ubicarse el nuevo elemento. Si el nodo hoja tiene menos elementos que el mximo nmero de elementos legales, entonces hay lugar para uno ms. Inserte el nuevo elemento en el nodo, respetando el orden de los elementos. De otra forma, el nodo debe ser dividido en dos nodos. La divisin se realiza de la siguiente manera: Se escoge el valor medio entre los elementos del nodo y el nuevo elemento. Los valores menores que el valor medio se colocan en el nuevo nodo izquierdo, y los valores mayores que el valor medio se colocan en el nuevo nodo derecho; el valor medio acta como valor separador. El valor separador se debe colocar en el nodo padre, lo que puede provocar que el padre sea dividido en dos, y as sucesivamente.

Si las divisiones de nodos suben hasta la raz, se crea una nueva raz con un nico elemento como valor separador, y dos hijos. Es por esto por lo que la cota inferior del tamao de los nodos no se aplica a la raz. El mximo nmero de elementos por nodo es U-1. As que debe ser posible dividir el nmero mximo de elementos U-1 en dos nodos legales. Si este nmero fuera impar, entonces U=2L, y cada uno de los nuevos nodos tendran (U-2)/2 = L-1 elementos, y por lo tanto seran nodos legales. Si U-1 fuera par, U=2L-1, as que habra 2L-2 elementos en el nodo. La mitad de este nmero es L-1, que es el nmero mnimo de elementos permitidos por nodo. Un algoritmo mejorado admite una sola pasada por el rbol desde la raz,hasta el nodo donde la insercin tenga lugar,dividiendo todos los nodos que estn llenos encontrados a su paso.Esto evita la necesidad de volver a cargar en memoria los nodos padres,que pueden ser caros si los nodos se encuentran en una memoria secundaria.Sin embargo,para usar este algoritmo mejorado, debemos ser capaces de enviar un elemento

al nodo padre y dividir el resto U-2 elementos en 2 nodos legales,sin aadir un nuevo elemento.Esto requiere que U=2L en lugar deU=L-1,lo que explica por qu algunos libros de texto imponen este requisito en la definicin de rboles-B

Eliminacin
La eliminacin de un elemento es directa si no se requiere correccin para garantizar sus propiedades. Hay dos estrategias populares para eliminar un nodo de un rbol B. localizar y eliminar el elemento, y luego corregir, o hacer una nica pasada de arriba a abajo por el rbol, pero cada vez que se visita un nodo, reestructurar el rbol para que cuando se encuentre el elemento a ser borrado, pueda eliminarse sin necesidad de continuar reestructurando

Se pueden dar dos problemas al eliminar elementos: primero, el elemento puede ser un separador de un nodo interno. Segundo, puede suceder que al borrar el elemento, el nmero de elementos del nodo quede debajo de la cota mnima. Estos problemas se tratan a continuacin en orden.

ELIMINACIN EN UN NODO HOJA


Busque el valor a eliminar. Si el valor se encuentra en un nodo hoja, se elimina directamente la clave, posiblemente dejndolo con muy pocos elementos; por lo que se requerirn cambios adicionales en el rbol.

Eliminar clave 20 de un nodo interno

ELIMINACIN EN UN NODO INTERNO

Cada elemento de un nodo interno acta como valor separador para dos subrboles, y cuando ese elemento es eliminado, pueden suceder dos casos. En el primero, tanto el hijo izquierdo como el derecho tienen el nmero mnimo de elementos, L-1. Pueden entonces fundirse en un nico nodo con 2L-2 elementos, que es un nmero que no excede U-1 y por lo tanto es un nodo legal. A menos que se sepa que este rbol B en particular no tiene datos duplicados, tambin se debe eliminar el elemento en cuestin (recursivamente) del nuevo nodillo. En el segundo caso, uno de los dos nodos hijos tienen un nmero de elementos mayor que el mnimo. Entonces se debe hallar un nuevo separador para estos dos subrboles. Note que el mayor elemento del rbol izquierdo es el mayor elemento que es menor que el separador. De la misma forma, el menor elemento del subrbol derecho es el menor elemento que es mayor que el separador. Ambos elementos se encuentran en nodos hoja, y cualquiera de los dos puede ser el nuevo separador. Si el valor se encuentra en un nodo interno, escoja un nuevo separador (puede ser el mayor elemento del subrbol izquierdo o el menor elemento del subrbol derecho), elimnelo del nodo hoja en que se encuentra, y reemplace el elemento a eliminar por el nuevo separador. Como se ha eliminado un elemento de un nodo hoja, se debe tratar este caso de manera equivalente.

REBALANCEO DESPUS DE LA ELIMINACIN


Si al eliminar un elemento de un nodo hoja el nodo se ha quedado con menos elementos que el mnimo permitido, algunos elementos se deben redistribuir. En algunos casos el cambio lleva la deficiencia al nodo padre, y la redistribucin se debe aplicar iterativamente hacia arriba del rbol, quiz incluso hasta a la raz. Dado que la cota mnima en el nmero de elementos no se aplica a la raz, el problema desaparece cuando llega a sta. La estrategia consiste en hallar un hermano para el nodo deficiente que tenga ms del mnimo nmero de elementos y redistribuir los elementos entre los hermanos para que todos tengan ms del mnimo. Esto tambin cambia los separadores del nodo padre. 1. Si el nodo hermano inmediato de la derecha del nodo deficiente tiene ms del mnimo nmero de elementos, escoja el valor medio entre el separador y ambos hermanos como nuevo separador y colquelo en el padre. 2. Redistribuya los elementos restantes en los nodos hijo derecho e izquierdo. 3. Redistribuya los subrboles de los dos nodos . Los subrboles son trasplantados por completo, y no se alteran si se mueven a un otro nodo padre, y esto puede hacerse mientras los elementos se redistribuyen. 4. Si el nodo hermano inmediato de la derecha del nodo deficiente tiene el mnimo nmero de elementos, examine el nodo hermano inmediato de la izquierda. 5. Si los dos nodos hermanos inmediatos tienen el mnimo nmero de elementos, cree un nuevo nodo con todos los elementos del nodo deficiente, todos los elementos de uno de sus hermanos, colocando el separador del padre entre los elementos de los dos nodos hermanos fundidos. 6. Elimine el separador del padre, y reemplace los dos hijos que separaba por el nuevo nodo fundido.

7. Si esa accin deja al nmero de elementos del padre por debajo del mnimo, repita estos pasos en el nuevo nodo deficiente, a menos que sea la raz, ya que no tiene cota mnima en el nmero de elementos.

CONSTRUCCIN INICIAL
En aplicaciones, es frecuentemente til construir un rbol-B para representar un gran nmero de datos existentes y despus actualizarlo de forma creciente usando operaciones Standard de los rboles-B. En este caso, el modo ms eficiente para construir el rbol-B inicial no sera insertar todos los elementos en el conjunto inicial sucesivamente, si no construir el conjunto inicial de nodos hoja directamente desde la entrada, y despus construir los nodos internos a partir de este conjunto. Inicialmente, todas las hojas excepto la ltima tienen un elemento ms, el cual ser utilizado para construir los nodos internos. Por ejemplo, si los nodos hoja tienen un tamao mximo de 4 y el conjunto inicial es de enteros desde el 1 al 24, tenemos que construir inicialmente 5 nodos hoja conteniendo 5 valores cada uno (excepto el ltimo que contiene 4): 1 2 3 5 6 7 8 1 0 11 1 1 1 1 2 3 4 5 16 1 1 1 2 7 8 9 0 21 2 2 2 2 3 4

Construiremos el siguiente nivel hacia arriba desde las hojas tomando el ltimo elemento de cada hoja excepto el ltimo. De nuevo, cada nodo excepto el ltimo contendr un valor ms. En el ejemplo, es supuesto que los nodos internos contienen como mucho 2 valores (por lo que pueden tener 3 hijos). Luego el siguiente nivel de nodos internos nos quedara de la siguiente manera: 5 1 1 0 5

20

1 2 3

6 7 8

11

1 1 1 2 3 4

16

1 1 1 7 8 9

21

2 2 2 2 3 4

Este proceso se continuar hasta que alcancemos un nivel con un solo nodo y no esta sobrecargado. En nuestro ejemplo solo nos quedara el nivel de la raz: 15 5 1 0

20

1 2 3

6 7 8

11

1 1 1 2 3 4

16

1 1 1 7 8 9

21

2 2 2 2 3 4

En informtica, un rbol-B es un tipo de estructura de datos de rboles. Representa una coleccin de datos ordenados de manera que se permite una insercin y borrado

eficientes de elementos. Es un ndice, multinivel, dinmico, con un lmite mximo y mnimo en el nmero de claves por nodo. Un rbol-B+ es una variacin de un rbol-B. En un rbol-B+, en contraste respecto un rbol-B, toda la informacin se guarda en las hojas. Los nodos internos slo contienen claves y punteros. Todas las hojas se encuentran en el mismo, ms bajo nivel. Los nodos hoja se encuentran unidos entre s como una lista enlazada para permitir bsqueda secuencial. El nmero mximo de claves en un registro es llamado el orden del rbol-B+. El mnimo nmero de claves por registro es la mitad del mximo nmero de claves. Por ejemplo, si el orden de un rbol-B+ es n, cada nodo (exceptuando la raz) debe tener entre n/2 y n claves. El nmero de claves que pueden ser indexadas usando un rbol-B+ est en funcin del orden del rbol y su altura. Para un rbol-B+ de orden n, con una altura h: Nmero mximo de claves es: nh Nmero mnimo de claves es: 2(n / 2)h 1 El rbol-B+ fue descrito por primera vez en el documento "Rudolf Bayer, Edward M. McCreight: Organization and Maintenance of Large Ordered Indexes. Acta Informtica 1: 173-189 (1972)".

RBOL MULTICAMINO Los rboles multicamino o rboles tipo rbol usadas en computacin. DEFINICIN
Un rbol multicamino posee un grado g mayor a dos, donde cada nodo de informacin del rbol tiene un mximo de g hijos. Sea un rbol de m-caminos A, es un rbol m-caminos si y solo si:

multirrama son estructuras

de

datos de

A est vaco Cada nodo de A muestra la siguiente estructura: [nClaves,Enlace0,Clave1,...,ClavenClaves,EnlacenClaves] nClaves es el nmero de valores de clave de un nodo, pudiendo ser: 0 <= nClaves <= g-1 Enlacei, son los enlaces a los subrboles de A, pudiendo ser: 0 <= i <= nClaves Clavei, son los valores de clave, pudiendo ser: 1 <= i <= nClaves Clavei < Clavei+1 Cada valor de clave en el subrbol Enlacei es menor que el valor de Clavei+1 Los subrboles Enlacei, donde 0 <= i <= nClaves, son tambin rboles m-caminos. Existen muchas aplicaciones en las que el volumen de la informacin es tal, que los datos no caben en la memoria principal y es necesario almacenarlos, organizados en archivos, en dispositivos de almacenaminento secundario. Esta organizacin de archivos debe ser suficientemente adecuada como para recuperar los datos del mismo en forma eficiente.

VENTAJAS E INCONVENIENTES
La principal ventaja de este tipo de rboles consiste en que existen ms nodos en un mismo nivel que en los rboles binarios con lo que se consigue que, si el rbol es de bsqueda, los accesos a los nodos sean ms rpidos. El inconveniente ms importante que tienen es la mayor ocupacin de memoria, pudiendo ocurrir que en ocasiones la mayora de los nodos no tengan descendientes o al menos no todos los que podran tener desaprovechndose por tanto gran cantidad de memoria. Cuando esto ocurre lo ms frecuente es transformar el rbol multicamino en su binario de bsqueda equivalente.

CONCLUSIN
De este trabajo se podra decir que un rbol binario se define como un conjunto finito de elementos llamados nodos. En estos casos se puede usar terminologa de relaciones familiares para descubrir las relaciones entre los nodos de un rbol; y que un rbol puede ser implementado fcilmente en una computadora. Es bueno hacer nfasis en esto ya que se puede saber mucho sobre lo que tiene que ver con los rboles; entre las cosas que podemos mencionar se encuentra la raz, los nodos de un rbol y la diferencia entre nodos sucesores y nodos terminales, como se muestran en el contenido del trabajo.

E-GRAFIA
http://www.monografias.com/trabajos36/arboles/arboles2.shtml#binarios http://www.algoritmia.net/articles.php?id=17 http://es.wikipedia.org/wiki/%C3%81rbol_binario

You might also like