Está en la página 1de 12

CORPORATIVO INTERNACIONAL UNIVERSITARIO

ASIGNATURA: ORGANIZACIN DE ARCHIVOS Y ESTRUCTURAS DE DATOS

DOCENTE: L.I. GABRIEL FLORES GONZALEZ

ALUMNO: HERNAN DARIO GONZALEZ VASQUEZ

SEGUNDO CUATRIMESTRE

ENERO DE 2012

INDICE
TEMAS Y SUBTEMAS INTRODUCCIN 4.0 ALGORITMOS PARA MANIPULAR DATOS 4.1 rboles binarios 4.2 Viaje por rboles binarios 4.3 Estructuras generales 4.4 Aplicacin de rboles y estructuras generales CONCLUSIONES BIBLIOGRAFA PGINA 3 4 4 5 8 9 11 12

INTRODUCCION

Adems de conocer varios tipos de estructuras de datos como son: pilas, colas, listas enlazadas simples, listas doblemente enlazadas, etc. Tambin estn los rboles binarios, y es precisamente lo que vamos a comentar en este tema. Adentrndonos en este tema lo que trata de explicar es lo siguiente: y y y y y y Concepto de rbol binario. Tipos de rboles binarios. Nomenclatura de los rboles binarios. Viajes por rboles binarios. Estructura general. Aplicacin de los rboles binarios.

4.0 ALGORITMOS PARA MANIPULAR RBOLES 4.1 RBOLES BINARIOS Un rbol binario es una estructura de datos en la cual cada nodo siempre tiene un hijo izquierdo y un hijo derecho. No pueden tener ms de dos hijos (de ah el nombre "binario"). Si algn hijo tiene como referencia a null, es decir que no almacena ningn dato, entonces este es llamado un nodo externo. En el caso contrario el hijo es llamado un nodo interno. Existen varios tipos de rboles binarios como son: y y y Un rbol binario es un rbol con raz en el que cada nodo tiene como mximo dos hijos. Un rbol binario lleno es un rbol en el que cada nodo tiene cero o dos hijos. 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). 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.

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. La terminologa que por lo regular se utiliza para el manejo de arboles es la siguiente:

Definiremos varios conceptos. En relacin con otros nodos:

y y

Nodo hijo: cualquiera de los nodos apuntados por uno de los nodos del rbol. En el ejemplo, 'L' y 'M' son hijos de 'G'. Nodo padre: nodo que contiene un puntero al nodo actual. En el ejemplo, el nodo 'A' es padre de 'B', 'C' y 'D'.

Los rboles con los que trabajaremos tienen otra caracterstica importante: cada nodo slo puede ser apuntado por otro nodo, es decir, cada nodo slo tendr un padre. Esto hace que estos rboles estn fuertemente jerarquizados, y es lo que en realidad les da la apariencia de rboles. En cuanto a la posicin dentro del rbol: y y y Nodo raz: nodo que no tiene padre. Este es el nodo que usaremos para referirnos al rbol. En el ejemplo, ese nodo es el 'A'. Nodo hoja: nodo que no tiene hijos. En el ejemplo hay varios: 'F', 'H', 'I', 'K', 'L', 'M', 'N' y 'O'. Nodo rama: aunque esta definicin apenas la usaremos, estos son los nodos que no pertenecen a ninguna de las dos categoras anteriores. En el ejemplo: 'B', 'C', 'D', 'E', 'G' y 'J'.

4.2 VIAJE POR RBOLES BINARIOS Recorridos en profundidad El mtodo de este recorrido es tratar de encontrar de la cabecera a la raz en nodo de unidad binaria. Ahora pasamos a ver la implementacin de los distintos recorridos: Recorrido en pre-orden En este tipo de recorrido se realiza cierta accin (quizs simplemente imprimir por pantalla el valor de la clave de ese nodo) sobre el nodo actual y posteriormente se trata el subrbol izquierdo y cuando se haya concluido, el subrbol derecho. Otra forma para entender el recorrido con este mtodo seria seguir el orden: nodo raz, nodo izquierda, nodo derecha. En el rbol de la figura el recorrido en preorden sera: 2, 7, 2, 6, 5, 11, 5, 9 y 4. void preorden(tArbol *a) { if (a != NULL) { tratar(a); //Realiza una operacin en nodo
5

preorden(a->hIzquierdo); preorden(a->hDerecho); } } Implementacin en pseudocdigo de forma iterativa: push(s,NULL); //insertamos en una pila (stack) el valor NULL, para asegurarnos de que est vaca push(s,raz); //insertamos el nodo raz MIENTRAS (s <> NULL) HACER p = pop(s); //sacamos un elemento de la pila tratar(p); //realizamos operaciones sobre el nodo p SI (D(p) <> NULL) //preguntamos si p tiene rbol derecho ENTONCES push(s,D(p)); FIN-SI SI (I(p) <> NULL) //preguntamos si p tiene rbol izquierdo ENTONCES push(s,I(p)); FIN-SI FIN-MIENTRAS

Recorrido en post-orden En este caso se trata primero el subrbol izquierdo, despus el derecho y por ltimo el nodo actual. Otra forma para entender el recorrido con este mtodo seria seguir el orden: nodo izquierda, nodo derecha, nodo raz. En el rbol de la figura el recorrido en postorden sera: 2, 5, 11, 6, 7, 4, 9, 5 y 2. void postorden(tArbol *a) { if (a != NULL) { postorden(a->hIzquiedo); postorden(a->hDerecho); tratar(a); //Realiza una operacin en nodo } }

Recorrido en in-orden En este caso se trata primero el subrbol izquierdo, despus el nodo actual y por ltimo el subrbol derecho. En un ABB este recorrido dara los valores de clave ordenados de menor a mayor. Otra forma para entender el recorrido con este mtodo seria seguir el orden: nodo izquierda, nodo raz, nodo derecha. En el rbol de la figura el recorrido en inorden sera: 2, 7, 5, 6, 11, 2, 5, 4, 9. Esquema de implementacin: void inorden(tArbol *a) { if (a != NULL) { inorden(a->hIzquierdo); tratar(a); inorden(a->hDerecho); } }

//Realiza una operacin en nodo

Recorridos en amplitud (o por niveles) En este caso el recorrido se realiza en orden por los distintos niveles del rbol. As, se comenzara tratando el nivel 1, que slo contiene el nodo raz, seguidamente el nivel 2, el 3 y as sucesivamente. En el rbol de la figura el recorrido en amplitud sera: 2, 7, 5, 2, 6, 9, 5, 11 y 4. Al contrario que en los mtodos de recorrido en profundidad, el recorrido por niveles no es de naturaleza recursiva. Por ello, se debe utilizar una cola para recordar los subrboles izquierdos y derecho de cada nodo. El esquema algoritmo para implementar un recorrido por niveles es exactamente el mismo que el utilizado en la versin iterativa del recorrido en preorden pero cambiando la estructura de datos que almacena los nodos por una cola. Implementacin en C: void arbol_recorrido_anch (tipo_Arbol* A) { tipo_Cola cola_nodos; // esta cola esta implementada previamente, almacena punteros (posiciones de nodos de arbol) tipo_Pos nodo_actual; // este es un puntero llevara el recorrido
7

if (vacio(A)) // sie el arbol esta vacio, salimos return; cola_inicializa(&cola_nodos); // obvio, y necesario cola_enqueue(A, &cola_nodos); // se encola la raiz while (!vacia(&cola_nodos)) { // mientras la cola no se vacie se realizara el recorrido nodo_actual = cola_dequeue(&cola_nodos) // de la cola saldran los nodos ordenados por nivel printf("%c,", nodo_actual->info); // se "procesa" el nodo donde va el recorrido, en este caso se imprime if (nodo_actual->izq != null) // si existe, ponemos el hijo izquierdo en la cola cola_enqueue(nodo_actual->izq, &cola_nodos); if (nodo_actual->der != null) // si existe, ponemos el hijo derecho en la cola cola_enqueue(nodo_actual->der, &cola_nodos); } // al vaciarse la cola se han visitado todos los nodos del arbol } 4.3 ESTRUCTURAS GENEREALES
La implementacin en C de un rbol binario puede declararse de varias maneras.

Algunas de ellas son: Estructura con manejo de memoria dinmica, siendo puntA el puntero que apunta al rbol de tipo tArbol: typedef struct nodo { int clave; struct nodo *izdo, *dcho; }Nodo;

Estructura con arreglo indexado: typedef struct tArbol

{ int clave; tArbol hIzquierdo, hDerecho; } tArbol; tArbol rbol[NUMERO_DE_NODOS]; En el caso de un rbol binario casi-completo (o un rbol completo), puede utilizarse un sencillo arreglo de enteros con tantas posiciones como nodos deba tener el rbol. La informacin de la ubicacin del nodo en el rbol es implcita a cada posicin del arreglo. As, si un nodo est en la posicin i, sus hijos se encuentran en las posiciones 2i+1 y 2i+2, mientras que su padre (si tiene), se encuentra en la posicin truncamiento((i-1)/2) (suponiendo que la raz est en la posicin cero). Este mtodo se beneficia de un almacenamiento ms compacto y una mejor localidad de referencia, particularmente durante un recorrido en preorden. La estructura para este caso sera por tanto: int rbol[NUMERO_DE_NODOS];

4.4 APLICACIONES DE RBOLES Y ESTRUCTURAS GENERALES De las estructuras de datos de tipo rbol, la especie ms utilizada es el rbol binario de bsqueda. Los principales tipos de rboles binarios de bsqueda son los AVL, B* y balanceado. Los rboles binarios de bsqueda se utilizan para localizar en forma rpida un elemento almacenado en ese rbol, a partir de una clave. Son una forma de implementar arreglos asociativos o mapas, en donde se almacenan elementos que son pares <clave, valor>. En las bases de datos relacionales, para poder localizar en forma rpida un registro de una taba a partir de una clave, se utilizan objetos asociados a las tablas llamados ndices. Estos ndices son rboles binarios de bsqueda almacenados en el disco, que a partir de una clave indican dnde se encuentra el registro correspondiente en la tabla. Otro ejemplo de la utilizacin de rboles binarios de bsqueda son los diccionarios. A partir de una palabra, se realiza una bsqueda en el rbol para saber si est incluida en el conjunto, y si existe, se obtienen sus datos asociados (por ejemplo, si es un verbo, un sustantivo, un artculo, etc.).
9

En teora de compiladores, durante la fase de anlisis del cdigo fuente, los analizadores lxico, sintctico y semntico utilizan tablas de smbolos, en donde se almacenan las palabras clave y las palabras reservadas y sus atributos, implementadas (por lo general) como rboles binarios de bsqueda. En sntesis, se utiliza un rbol binario de bsqueda cuando se desea almacenar en una estructura de datos cierta informacin, a la cual luego se desea acceder en forma rpida a partir de una clave.

10

CONCLUSIONES

Los rboles binarios son estructuras de datos comunes al igual que otros tipos de estructuras de datos utilizados en programacin. Analizamos y comprendimos que existen diferentes recorridos realizados sobre rboles binarios de los que destacan algunos como stos: y y y y Recorridos en pre-orden. Recorridos en post-orden. Recorridos en in-orden. Recorridos en amplitud.

Cada uno de estos recorridos tiene una funcin diferente a los otros. Asimismo rbol binario ms utilizado es el de bsqueda, algunas de sus aplicaciones pueden ser que con una clave encuentran de forma ms rpida un elemento del mismo rbol, en una base de datos se localiza ms rpido algn dato.

11

BIBLIOGRAFIA

1. http://es.wikipedia.org/wiki/%C3%81rbol_binario

12

También podría gustarte