You are on page 1of 11

1.

rboles

1.1. Definicin de rbol


Un rbol es una estructura de datos, que puede definirse de forma recursiva como: - Una estructura vaca o - Un elemento o clave de informacin (nodo) ms un nmero finito de estructuras tipo rbol, disjuntos, llamados subrboles. Si dicho nmero de estructuras es inferior o igual a 2, se tiene un rbol binario. Es, por tanto, una estructura no secuencial.

Pero para este presente trabajo se ampliar el tema de Arboles Binarios.

2. rbol Binario
2.1. Definicin de rbol
Se define un rbol binario como un conjunto finito de elementos (nodos) que bien est vaco o est formado por una raz con dos rboles binarios disjuntos, es decir, dos descendientes directos llamados subrbol izquierdo y subrbol derecho. Los rboles binarios (tambin llamados de grado 2) tienen una especial importancia. Las aplicaciones de los arboles binarios son muy variadas ya que se les puede utilizar para representar una estructura en la cual es posible tomar decisiones con dos opciones en distintos puntos. rbol Binario

Estructuras tipo rbol

Estructuras que no son Arboles

2.2. Trminos en rboles binarios.


Si el nodo raz tiene 0 relaciones se llama hoja. Si el nodo raz tiene 1 relacin a la izquierda, el segundo elemento de la relacin es el subrbol izquierdo. Si el nodo raz tiene 1 relacin a la derecha, el segundo elemento de la relacin es el subrbol derecho. Si A es la raz de un rbol y B es la raz de su subrbol izquierdo (o derecho), se dice que A es el padre de B y se dice que B es el hijo izquierdo (o derecho)de A. El nodo a es antecesor del nodo b (y recprocamente el nodo b es descendiente del nodo a), si a es el padre de b o el padre de algn ancestro de b. Un nodo b es un descendiente izquierdo del nodo a, si b es el hijo izquierdo de a o un descendiente del hijo izquierdo de a. Un descendiente derecho se define de la misma forma. Dos nodos son hermanos si son hijos izquierdo y derecho del mismo padre.

Otros trminos relacionados con rboles, tienen que ver con su funcionamiento y topologa:

Si cada nodo que NO es una hoja tiene un subrbol izquierdo y un subrbol derecho, entonces se trata de un rbol binario completo. El nivel de un nodo es el nmero de aristas que se deben recorrer para llegar desde ese nodo al nodo raz. De manera que el nivel del nodo raz es 0, y el nivel de cualquier otro nodo es el nivel del padre ms uno. La profundidad de un nodo es el mximo nivel de cualquier hoja en el rbol.

2.3. Clasificacin de Arboles Binarios


Existen cuatro tipos de rbol binario:

rbol rbol rbol rbol

Binario Binario Binario Binario

Distinto. Similares. Equivalentes. Completos.

A continuacin se har una breve descripcin de los diferentes tipos de rbol binario as como un ejemplo de cada uno de ellos. Se dice que dos rboles binarios son distintos cuando sus estructuras son diferentes.
rbol Binario Similar rbol Binario Distinto

Dos rboles binarios son similares cuando sus estructuras son idnticas, pero la informacin que contienen sus nodos es diferente. Son aquellos arboles que son similares y que adems los nodos contienen la misma informacin. Son aquellos arboles en los que todos sus nodos excepto los del ltimo nivel, tiene dos hijos; el subrbol izquierdo y el subrbol derecho.

rbol Binario Equivalente

rbol Binario Completo

2.4. Recorrido de un rbol binario


Recorrer un rbol consiste en acceder una sola vez a todos sus nodos. Esta operacin es bsica en el tratamiento de rboles y nos permite, por ejemplo, imprimir toda la informacin almacenada en el rbol, o bien eliminar toda esta informacin o, si tenemos un rbol con tipo base numrica, sumar todos los valores... En el caso de los rboles binarios, el recorrido de sus distintos nodos se debe realizar en tres pasos:
o o o

acceder a la informacin de un nodo dado, acceder a la informacin del subrbol izquierdo de dicho nodo, acceder a la informacin del subrbol derecho de dicho nodo.

Imponiendo la restriccin de que el subrbol izquierdo se recorre siempre antes que el derecho, esta forma de proceder da lugar a tres tipos de recorrido, que se diferencian por el orden en el que se realizan estos tres pasos. As distinguimos:
Preorden: primero se accede a la informacin del nodo, despus al

subrbol izquierdo y despus al derecho.

Ejemplo:

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


El recorrido en PreOrden del rbol es el siguiente:

Inorden: primero se accede a la informacin del subrbol izquierdo,

despus se accede a la informacin del nodo y, por ltimo, se accede a la informacin del subrbol derecho. void enOrden(ArbolBinario raz) { if(raiz) { enOrden(raiz>izq) visitar(raiz>dato) enOrden(raiz>der) } }

Ejemplo:
El recorrido en EnOrden del rbol es el siguiente:

Postorden:

primero se accede a la informacin del subrbol izquierdo, despus a la del subrbol derecho y, por ltimo, se accede a la informacin del nodo. void PostOrden(ArbolBinario ra z) { if(raiz) { PostOrden(raz>izq) PostOrden(raz>der) visitar(raiz>dato) } }

Ejemplo:

El recorrido en PostOrden del rbol es el siguiente:

Si el nodo del que hablamos es la raz del rbol, estaremos recorriendo todos sus nodos. Debemos darnos cuenta de que esta definicin del recorrido es claramente recursiva, ya que el recorrido de un rbol se basa en el recorrido de sus subrboles izquierdo y derecho usando el mismo mtodo. Aunque podramos plantear una implementacin iterativa de los algoritmos de recorrido, el uso de la recursin simplifica enormemente esta operacin.

2.5. Operaciones
Borrar: Elimina del rbol a un nodo dado Bsqueda: Buscar un elemento en un rbol de Bsqueda Insertar: inserta un nodo dentro de un rbol Construir: crea un rbol con un elemento raz y dos ramas. Copiar: crear una copia del rbol CrearArbol: Inicia un rbol vaco Elementos: determina el nmero de elementos del rbol EsVacio: comprueba si el rbol tiene nodos Igualar: determinar si dos rboles son idnticos 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 .

2.6. rboles binarios de bsqueda


Un rbol binario de bsqueda es una estructura de datos de tipo rbol binario en el que para todos sus nodos, el hijo izquierdo, si existe, contiene un valor menor que el nodo padre y el hijo derecho, si existe, contiene un valor mayor que el del nodo padre.

2.6.1.

Bsqueda en rbol de Bsqueda

Nodo *buscar(Nodo *raiz, TipoElemento buscado) { if(!raiz) return 0 /*rbol vaco*/ else if (buscado==raiz>dato) return raiz else if (buscado<raiz>dato) return buscar(raiz>izq, buscado) else return buscar(raiz>der, buscado) } 2.6.2. Insertar en rboles de Bsqueda La operacin de insercin de un nuevo nodo en un rbol binario de bsqueda consta de tres fases bsicas: 1. Creacin del nuevo nodo 2. Bsqueda de su posicin correspondiente en el rbol. Se trata de encontrar la posicin que le corresponde para que el rbol resultante siga siendo de bsqueda. 3. Insercin en la posicin encontrada. Se modifican de modo adecuado los enlaces de la estructura.

La creacin de un nuevo nodo supone simplemente reservar espacio para el registro asociado y rellenar sus tres campos. Dado que no nos hemos impuesto la restriccin de que el rbol resultante sea equilibrado, consideraremos que la posicin adecuada para insertar el nuevo nodo es la hoja en la cual se mantiene el orden del rbol. Insertar el nodo en una hoja supone una operacin mucho menos complicada que tener que insertarlo como un nodo interior y modificar la posicin de uno o varios subrboles completos. La insercin del nuevo nodo como una hoja supone simplemente modificar uno de los enlaces del nodo que ser su padre. Veamos con un ejemplo la evolucin de un rbol conforme vamos insertando nodos siguiendo el criterio anterior respecto a la posicin adecuada.

Lenguaje C++ void insertar (Nodo** raiz, TipoElemento dato) { if (!(*raiz)) *raiz = crearNodo(dato) else if (dato < (*raiz) -> dato) insertar (&((*raiz) - > izdo), dato) else insertar (&((*raiz) - > dcho), dato) }

2.6.3. Eliminar de un rbol Binario de Bsqueda La eliminacin de un nodo de un rbol binario de bsqueda es ms complicada que la insercin, puesto que puede suponer la recolocacin de varios de sus nodos. En lneas generales un posible esquema para abordar esta operacin es el siguiente: 1. Buscar el nodo que se desea borrar manteniendo un puntero a su padre. 2. Si se encuentra el nodo hay que contemplar tres casos posibles: a. Si el nodo a borrar no tiene hijos, simplemente se libera el espacio que ocupa b. Si el nodo a borrar tiene un solo hijo, se aade como hijo de su padre, sustituyendo la posicin ocupada por el nodo borrado. c. Si el nodo a borrar tiene los dos hijos se siguen los siguientes pasos: i. Se busca el mximo de la rama izquierda o el mnimo de la rama derecha. ii. Se sustituye el nodo a borrar por el nodo encontrado. Veamos grficamente varios ejemplos de eliminacin de un nodo:

Lenguaje C++
void eliminar (Nodo** r, TipoElemento dato) { if (!(*r)) puts("Nodo no encontrado") else if (dato < (*r) -> dato) eliminar(&(*r) -> izdo, dato) else if (dato > (*r) -> dato) eliminar(&(*r) -> dcho,dato) else /* Nodo encontrado */ { Nodo* q /* puntero al nodo
a suprimir */ Padre */

(*r) = q -> izdo else /* tiene rama izquierda y


derecha */

reemplazar(&q) free(q)

} } void reemplazar(Nodo** act) { Nodo* a, *p p = *act a = (*act) -> izdo /* menores a


IZQ*/

q = (*r) /* r es el ptr del nodo

if (q -> izdo == NULL) (*r) = q- > dcho else if (q -> dcho == NULL)

while (a -> dcho) { p = a /* buscamos el Mayor a


DER*/

a = a -> dcho } (*act) -> dato = a -> dato if (p == (*act)) p -> izdo = a -> izdo
/* Cambio de Campo Datos */ /* Al Abuelo p, se hace cargo de nieto IZQ */

else p -> dcho = a -> izdo (*act) = a }


/* Ojo: No puede tener nada a Derecha, pues abramos bajado en el while.*/

Bibliografa
http://html.rincondelvago.com/arboles-binarios_1.html http://es.wikipedia.org/wiki/%C3%81rbol_binario http://www.oocities.org/grupo22uagrm/ARBOLES.PDF http://es.wikibooks.org/wiki/Estructuras_de_datos_din%C3%A1micas/ %C3%81rboles http://www.algoritmia.net/articles.php?id=17 http://www.ucema.edu.ar/~rst/Algoritmos_y_Estructura_de_Datos/Teoria/5 ._Arboles_binarios.pdf

Anexos
Terminologa

La terminologa que por lo regular se utiliza para el manejo de arboles es la siguiente:


Hijo: X es hijo de Y, s y solo s el nodo X es apuntado por Y. Tambin se dice que X es descendiente directo de Y. Padre: X es padre de Y s y solo s el nodo X apunta a Y. Tambin se dice que X es antecesor de Y. Hermano: Dos nodos sern hermanos si son descendientes directos de un mismo nodo. Hoja: Se le llama hoja o terminal a aquellos nodos que no tienen ramificaciones (hijos). Nodo anterior: Es un nodo que no es raz ni terminal. Grado: Es el nmero de descendientes directos de un determinado nodo. Grado de un rbol: Es el mximo grado de todos los nodos del rbol. Nivel: Es el nmero de arcos que deben ser recorridos para llegar a un determinado nodo. Por definicin la raz tiene nivel 1. Altura: Es el mximo nmero de niveles de todos los nodos del rbol.

Peso: Es el nmero de nodos del rbol sin contar la raz. Longitud de camino: Es el nmero de arcos que deben ser recorridos para llegar desde la raz al nodo X. Por definicin la raz tiene longitud de camino 1, y sus descendientes directos longitud de camino 2 y as sucesivamente.

You might also like