You are on page 1of 19

ESTRUCTURAS DE DATOS I

TEMA: RBOLES BINARIOS


RBOLES GENERALES
ALUMNA: ADRIANA CASTRO
PREZ
DOCENTE: PATRICIA
LUGAR: TRES VALLES
FECHA: 08 DE NOVIEMBRE
2014

INDICE
............................................................................................... 2
................................................................................ 3
................................................................................................. 3
................................... 4
........................................................ 5
............... 6
.................................................. 7
...................................................................................... 8
..................................................................................... 10
............................................................. 12
.................................................................................................... 13
............................................................................. 15
......................... 15
.................................................. 16
................................................................................ 16
...................................................................................................... 17
............................................................................................................ 18

Las computadoras fueron diseadas o ideadas como una herramienta mediante


la cual podemos realizar operaciones de clculo complicadas en un lapso de
mnimo tiempo. Pero la mayora de las aplicaciones de este fantstico invento
del hombre, son las de almacenamiento y acceso de grandes cantidades de
informacin.
La informacin que se procesa en la computadora es un conjunto de datos, que
pueden ser simples o estructurados. Los datos simples son aquellos que ocupan
slo un localidad de memoria, mientras que los estructurados son un conjunto
de casillas de memoria a las cuales hacemos referencia mediante un
identificador nico.
Las estructuras de datos son una coleccin de datos cuya organizacin se
caracteriza por las funciones de acceso que se usan para almacenar y acceder
a elementos individuales de datos.

Empezamos declarando las variables que vamos a utilizar (lneas 1 a 4). Las
cadenas las vamos a leer carcter por carcter a travs de ch, para guardar la
pila utilizaremos el arreglo s, y p para saber cul es la posicin del ltimo
elemento en la pila. El entero i lo usaremos en ciclos y n para saber cuntos
casos debemos procesar.
En seguida tenemos el procedimiento push (lneas 6 a 10) y la
funcin pop (lneas 12 a 16), que nos sirven para meter y sacar datos de la pila.
Para guardar un dato, se lo mandamos como parmetro a push, donde
incrementamos la posicin del ltimo elemento y guardamos en esta posicin al
parmetro. Para obtener un dato, llamamos a la funcin pop, en la cual
devolvemos el valor del ltimo dato en la pila y decrementamos la posicin del
ltimo dato. En ningn momento estamos revisando si la pila est llena o vaca,
por lo que debemos tener cuidado al usarla (o agregar dichas verificaciones).
La parte principal del cdigo la tenemos entre las lneas 18 y 41. Empezamos
leyendo la cantidad de casos (lnea 19). Para cada caso, leemos carcter por
carcter hasta llegar al fin de lnea. En la lnea 22 inicializamos el tope de la pila.
Cuando leemos un parntesis que abre, lo agregamos a la pila (lneas 26 y 27).
Si encontramos uno que cierra, sacamos un dato de la pila y revisamos si cierra
correctamente (lneas 28 a 35); en caso de que no lo haga, ponemos la posicin
de la pila a una posicin cualquiera (distinta de cero) y nos salimos. Al final,
revisamos si la cadena es vlida de acuerdo a si la pila termino vaca o no.

A los arboles ordenados de grado dos se les conoce como arboles binarios ya que cada nodo del
rbol no tendr ms de dos descendientes directos. 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.
La representacin grfica de un rbol binario es la siguiente:

Hay dos formas tradicionales de representar un rbol binario en memoria:

Por medio de datos tipo punteros tambin conocidos como variables dinmicas o listas.
Por medio de arreglos.

Sin embargo la ms utilizada es la primera, puesto que es la ms natural para tratar este tipo de
estructuras.
Los nodos del rbol binario sern representados como registros que contendrn como mnimo
tres campos. En un campo se almacenar la informacin del nodo. Los dos restantes se utilizarn
para apuntar al subrbol izquierdo y derecho del subrbol en cuestin.
Cada nodo se representa grficamente de la siguiente manera:

Hay dos formas tradicionales de representar un rbol binario en memoria:

Por medio de datos tipo punteros tambin conocidos como variables dinmicas o listas.

Por medio de arreglos.

Sin embargo la ms utilizada es la primera, puesto que es la ms natural para tratar este tipo de
estructuras.

Los nodos del rbol binario sern representados como registros que contendrn como
mnimo tres campos. En un campo se almacenar la informacin del nodo.

Los dos restantes se utilizarn para apuntar al subrbol izquierdo y derecho del subrbol
en cuestin.

Cada nodo se representa grficamente de la siguiente manera:

Hay tres maneras de recorrer un rbol: en inorden, preorden y postorden. Cada una de ellas
tiene una secuencia distinta para analizar el rbol como se puede ver a continuacin:

1. INORDEN
Recorrer el subrbol izquierdo en inorden.
Examinar la raz.
Recorrer el subrbol derecho en inorden.

2. PREORDEN
Examinar la raz.
Recorrer el subrbol izquierdo en preorden.
recorrer el subrbol derecho en preorden.

3. POSTORDEN
Recorrer el subrbol izquierdo en postorden.
Recorrer el subrbol derecho en postorden.
Examinar la raz.

o Inorden: GDBHEIACJKF
o Preorden: ABDGEHICFJK
o Postorden: GDHIEBKJFCA

Existe un tipo especial de rbol binario llamado enhebrado, el cual contiene hebras que pueden
estar a la derecha o a la izquierda. El siguiente ejemplo es un rbol binario enhebrado a la
derecha
ARBOL ENHEBRADO A LA DERECHA. Este tipo de rbol tiene un apuntador a la
derecha que apunta a un nodo antecesor.

ARBOL ENHEBRADO A LA IZQUIERDA. Estos rboles tienen un apuntador a la


izquierda que apunta al nodo antecesor en orden.

Suponga un rbol binario T dispuesto en memoria por representacin enlazada. A veces se aade
al principio de T un nodo extra, especial, llamado nodo cabecera.

Cuando se usa este nodo extra, la variable el rbol, que llamaremos CABEZA (en lugar de raz),
apuntara al nodo de cabecera, y el puntero izquierdo del nodo cabecera apuntara a la raz de T.

Suponga un rbol binario T vaco. T aun contendr al nodo cabecera, pero su puntero izquierdo
contendr el valor nulo. As, la condicin

IZQ [CABEZA]=NULO
7

Indicara que el rbol est vaco.


Otra variacin de la representacin anterior de un rbol binario T es usar un nodo cabecera como
centinela. Esto es, si un nodo tiene un subrbol vaco, entonces el campo puntero para el subrbol
contendr la direccin del nodo cabecera en vez del valor nulo. De esta forma, ningn puntero
contendr una direccin invlida, y la condicin.
IZQ [CABEZA]=CABEZA
Indicara que el rbol est vaco.

Salvo que trabajemos con rboles especiales, como los que veremos ms adelante, las
inserciones sern siempre en punteros de nodos hoja o en punteros libres de nodos rama.
Con estas estructuras no es tan fcil generalizar, ya que existen muchas variedades de rboles.
De nuevo tenemos casi el mismo repertorio de operaciones de las que disponamos con las listas:
Aadir o insertar elementos.
Buscar o localizar elementos.
Borrar elementos.
Moverse a travs del rbol.
Recorrer el rbol completo.
Los algoritmos de insercin y borrado dependen en gran medida del tipo de rbol que estemos
implementando, de modo que por ahora los pasaremos por alto y nos centraremos ms en el
modo de recorrer rboles.
Una tarea muy comn a realizar con un rbol es ejecutar una determinada operacin con cada
uno de los elementos del rbol.
Esta operacin se considera entonces como un parmetro de una tarea ms general que es la
visita de todos los nodos o, como se denomina usualmente, del recorrido del rbol.
Si se considera la tarea como un proceso secuencial, entonces los nodos individuales se visitan
en un orden especfico, y pueden considerarse como organizados segn una estructura lineal.

De hecho, se simplifica considerablemente la descripcin de muchos algoritmos si puede


hablarse del proceso del siguiente elemento en el rbol, segn un cierto orden subyacente.

El rbol en montn se usa en un algoritmo de ordenacin llamado ordenacin por montn. Este
algoritmo mejora el tiempo de ejecucin en el peor caso comparado con el mtodo de ordenacin
rpida.
Definicin
Un rbol binario A se dice en montn si:
a) A es completo
b) El valor de cada nodo de A es mayor que los valores de cualquiera de sus hijos.
Insercin en un rbol en montn
Entrada: Lista de elementos.
Salida: rbol en montn.
Mientras existan elementos V en la entrada se proceder de la siguiente forma:
Se adiciona V al final de M de forma que M sigue siendo completo, aunque no
necesariamente sea un rbol en montn.
Si al adicionar V al rbol, no resulta de montn, se hace subir V hasta su lugar
apropiado en M hasta que M sea finalmente de montn.
Insercin en un rbol en montn
El rbol en montn con N elementos est guardado en el vector M. La accin Insercin_Montn
inserta V como un nuevo elemento del rbol. N se incrementa en 1. P da la posicin de V a
medida que sube por el rbol y PAD indica la posicin del padre de V.
Eliminacin de la raz en un rbol en montn
Entrada: rbol en montn M con N elementos
Salida: rbol en montn M con N-1 elementos
V = M (1) raz del rbol M
Procedimiento:
Para eliminar la raz en un rbol en montn M:
Asignamos la raz M(1) a la variable V
Reemplazamos el nodo raz a eliminar con el ltimo nodo que fue adicionado en M, de
modo que M sigue siendo completo, aunque no necesariamente un rbol en montn.
Retomamos, haciendo que la nueva raz se mueva a su lugar adecuado para que M sea
finalmente un rbol en montn.

10

CREACIN DE UN RBOL EN MONTN Se tiene una fila F de enteros. Se quiere construir una
aplicacin para crear un rbol en montn teniendo como entrada la fila F de enteros.

Entrada: F fila secuencial no vaca


Salida: M rbol en montn
Procedimiento:
Primer (F) abre la fila F
Tomar (F, V) toma el primer elemento de F y lo guarda en V.
Luego asignar V a M (1).
Tomar (F, V) toma el siguiente elemento de F y lo guarda en V.
El ciclo Mientras se ejecuta mientras existan elementos en la fila. El ciclo consiste en:
1. Insertar el elemento tomado de F en el rbol en Montn M
2. Tomar el siguiente elemento de F.
ORDENAMIENTO EN MONTN
Sea M un rbol en montn de N elementos, lo que quiere decir que el nodo raz corresponde al
mayor valor del rbol.
Si extraemos la raz y la colocamos en una lista, y reemplazamos la raz por el ltimo nodo, es
posible que el rbol resultante no sea un montn, en este caso lo retomamos para convertirlo en
un rbol en montn.
Nuevamente eliminamos la raz y la adicionamos en la lista, y as proseguimos hasta que el rbol
este vaco, y todos sus elementos se hayan pasado a la lista en orden descendente.
COMPLEJIDAD DE LA ORDENACION POR MONTN
En la construccin del rbol en montn M, el nmero de comparaciones para encontrar el sitio
adecuado para un nuevo elemento V no puede exceder a la profundidad del rbol. Como M es
un rbol completo, su profundidad est limitada por log m, donde m es el nmero de elementos
del rbol M. De este modo, el nmero de comparaciones g(n) para insertar los n elementos del
rbol est limitado por: g(n) n log n
Para eliminar los n elementos del rbol M, dado que el rbol es completo con m elementos y que
los subrboles izquierdo y derecho de M son montones, se elimina la raz y para retomar se
efectan cuatro comparaciones para mover el nuevo nodo raz (el ltimo del rbol) un paso abajo
en el rbol. Como la profundidad del rbol no excede a log m, al remontar se efectan a lo ms
4 log m comparaciones para encontrar el lugar adecuado del nuevo nodo raz. Si h(n) es el
nmero total de comparaciones para eliminar los n elementos de M, lo que requiere reamontonar
n veces, est limitado por: h(n) 4n log n
El tiempo de ejecucin para la ordenacin es proporcional a n log n, o sea, f(n) = O(n log n). El
tiempo de ejecucin de la ordenacin por el mtodo de la burbuja es O(n2). El tiempo medio de
11

ejecucin de la ordenacin rpida es O(n log n) como la del montn, pero para el peor caso es
proporcional a O (n2).

Un rbol de bsqueda binaria es una estructura apropiada para muchas de las aplicaciones que
se han discutido anteriormente con listas. La ventaja especial de utilizar un rbol es que se facilita
la bsqueda.
Un rbol binario de bsqueda es aquel en el que el hijo de la izquierda (si existe) de cualquier
nodo contiene un valor ms pequeo que el nodo padre, y el hijo de la derecha (si existe) contiene
un valor ms grande que el nodo padre.
Un rbol binario de bsqueda ABB (binary search tree), tambin llamado rbol binario ordenado,
es aquel en el cual sus nodos estn etiquetados con un valor de llave tomado de un conjunto E,
estos elementos pueden ser complejos, pero por simplicidad supondremos que son enteros. En
un rbol de bsqueda se cumple que:
Para todo nodo N:
Todos los valores de los nodos del subrbol izquierdo son menores que el valor de llave
de N.
Todos los valores de los nodos del subrbol derecho son mayores que el valor de la
llave de N.

El rbol binario de bsqueda ABB permite buscar y encontrar un elemento, tambin permite
insertar y borrar elementos fcilmente.
Esta estructura contrasta con los arreglos y las listas:
Arreglo unidimensional: aqu se puede buscar y encontrar fcilmente, pero es costoso
insertar y eliminar, porque se tienen que hacer desplazamientos a la izquierda o a la
derecha del elemento a eliminar o insertar.
Listas enlazadas: aqu se puede insertar y eliminar fcilmente, pero es costoso buscar
y encontrar un elemento, ya que se debe usar una bsqueda secuencial.

La definicin de rbol binario de bsqueda dada asume que todos los valores de los nodos son
distintos. Existe una definicin anloga de rbol binario de bsqueda que permite duplicados,
esto es, en la que cada nodo
N tiene la siguiente propiedad:
12

El valor de N es mayor que cualquier valor del subrbol izquierdo de N y es menor o igual que
cualquier valor del subrbol derecho de N

Implementar una funcin no recursiva para recorrer un rbol binario en inorden. (SOLUCIN)
El cdigo es el siguiente:
/*Fichero: comprobar.c */
#include < pilas.h>
#include < arbolesB.h>
/*---------------------------------------*/
void inordenNR(ArbolB T,void (* EscribirElemento)(void *),int tamano)
{
NodoB nodoActual,aux;
void *et;
Pila p;
int fin;
int faltaHD;
/*Indica si falta el hijo derecho*/
p=CrearPila(sizeof(NodoB));
et=malloc(tamano);
if(!et){
....
/*Error:Sin memoria*/
}
aux=NODOB_NULO;
Push(&aux,p);
nodoActual=RaizB(T);
fin=0;
while(!fin){
while(nodoActual!=NODOB_NULO){
Push(&nodoActual,p);
nodoActual=HijoIzqdaB(nodoActual,T);
}
Tope(&nodoActual,p);
Pop(p);
if (nodoActual!=NODOB_NULO){
EtiquetaArbolB(et,nodoActual,T);
(*EscribirElemento)(et);
13

nodoActual=HijoDrchaB(nodoActual,T);
}
else fin=1;
}
free(et);
DestruirPila(p);
}

14

Los arboles representan las estructuras no lineales y dinmicas de datos ms


importantes en computacin. Dinmicas porque las estructuras de rbol pueden
cambiar durante la ejecucin de un programa. No lineales, puesto que a cada
elemento del rbol pueden seguirle varios elementos.
Los arboles pueden ser construidos con estructuras estticas y dinmicas. Las
estticas son arreglos, registros y conjuntos, mientras que las dinmicas estn
representadas por listas.
La definicin de rbol es la siguiente: es una estructura jerrquica aplicada sobre
una coleccin de elementos u objetos llamados nodos; uno de los cuales es
conocido como raz. Adems se crea una relacin o parentesco entre los nodos
dando lugar a trminos como padre, hijo, hermano, antecesor, sucesor, ancestro,
etc... Formalmente se define un rbol de tipo T como una estructura homognea
que es la concatenacin de un elemento de tipo T junto con un nmero finito de
rboles disjuntos, llamados subrboles. Una forma particular de rbol puede ser la
estructura vaca.
La figura siguiente representa a un rbol general.

Se utiliza la recursin para definir un rbol porque representa la forma ms


apropiada y porque adems es una caracterstica inherente de los mismos.
Los arboles tienen una g variedad de aplicaciones. Por ejemplo, se pueden utilizar
para representar frmulas matemticas, para organizar adecuadamente la
informacin, para construir un rbol genealgico, para el anlisis de circuitos
elctricos y para numerar los captulos y secciones de un libro

15

En esta seccin estableceremos los mecanismos necesarios para convertir un rbol


general en un rbol binario. Para esto, debemos seguir los pasos que se describen
a continuacin:
Enlazar los hijos de cada nodo en forma horizontal (los hermanos).
Enlazar en forma vertical el nodo padre con el nodo hijo que se encuentra
ms a la izquierda.
Adems, debe eliminarse el vnculo de ese padre con el resto de sus hijos.
Rotar el diagrama resultante aproximadamente 45 grados hacia la izquierda,
y as se obtendr el rbol binario correspondiente.

En una estructura lineal resulta trivial establecer un criterio de movimiento


por la misma para acceder a los elementos, pero en un rbol esa tarea no
resulta tan simple. No obstante, existen distintos mtodos tiles en que
podemos sistemticamente recorrer todos los nodos de un rbol. Los tres
recorridos ms importantes se denominan preorden, inorden y
postorden aunque hay otros recorridos como es el recorrido por niveles.
Si consideramos el esquema general de un rbol tal como muestra la figura
siguiente, los recorridos se definen como sigue:

16

Se quiere representar rboles Generales no vacos y sin elementos repetidos de


enteros. Para ello consideren la siguiente definicin, que usa la semntica: primer
hijo - siguiente hermano.
Cdigo
TYPE ArbGen = POINTER TO NodoTree;
NodoTree = RECORD
dato: INTEGER;
primerHijo,sigHermano: ArbGen;
END;

Implementen las siguientes operaciones para rboles Generales no vacos y sin


elementos repetidos de enteros:
PROCEDURE ArbolHoja(elem : INTEGER) : ArbGen; (* Dado un elemento
genera un rbol que slo contiene dicho elemento, como una hoja *)
PROCEDURE Insertar(VAR a : ArbGen; v,w : INTEGER); (* Dados un rbol
de tipo ArbGen no vaco y sin elementos repetidos, y dos elementos v y w,
inserta a v como primer hijo (hijo ms a la izquierda) de w en el rbol, siempre
que w pertenezca al rbol y v no pertenezca al rbol. En caso contrario, la
operacin no tiene efecto *)
PROCEDURE EsArbolHoja(a: ArbGen): BOOLEAN; (* Dado un rbol de
tipo ArbGen no vaco y sin elementos repetidos, retorna TRUE si y slo si
el rbol es un rbol hoja (con un slo elemento) *)
PROCEDURE Pertenece(a: ArbGen; elem: INTEGER): BOOLEAN; (* Dados
un rbol de tipo ArbGen no vaco y sin elementos repetidos, y un elemento,
retorna TRUE si y slo si el elemento pertenece al rbol *)
PROCEDURE Borrar (VAR a: ArbGen; elem: INTEGER); (* Dados un rbol
de tipo ArbGen no vaco y sin elementos repetidos, y un elemento, elimina
todo el subrbol que tiene al elemento como raz, siempre que ste
pertenezca al rbol y no sea la raz del mismo. En caso contrario, la
operacin no tiene efecto *)

17

Los arboles binarios facilitan u optimizan la utilizacin de recursos en el


computador adems es una manera ms sencilla de manejar los datos
a comparacin de listas sencillas o dobles que para consultar un dato hay que pasar
por lo menos una vez por cada nodo en casos donde el dato deseado esta al final
de la lista, mientras que con rboles binarios el nmero mximo de nodos recorridos
es la posicin dentro del rbol de la hoja ms lejana.
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.

18