Вы находитесь на странице: 1из 18

RBOLES

Un rbol es un grupo finito de nodos, donde uno de esos nodos sirve como raz y el resto de los
nodos se organizan debajo de la raz de una forma jerrquica. Un nodo que referencia un nodo
debajo suyo es un nodo padre. De forma similar, un nodo referenciado por un nodo encima de l, es
un nodo hijo. Los nodos sin hijos, son nodos hoja. Un nodo podra ser un padre e hijo, o un nodo
hijo y un nodo hoja.

Un nodo padre podra referenciar tantos hijos como sea necesario. En muchas situaciones, los
nodos padre slo referencian un mximo de dos nodos hijos. Los rboles basados en dichos nodos
son conocidos como arboles binarios. La siguiente figura representa un rbol binario que almacena
siete palabras en orden alfabtico.

Insertar nodos, borrar nodos, y atravesar los nodos en rboles binarios o de otros tipos se realiza
mediante la recursin (vea el captulo siguiente). Por brevedad, no entraremos en los algoritmos
recursisvos de insercin, borrado y movimiento por los nodos. En su lugar, presentar el cdigo
fuente de una aplicacin de contaje de palabras para demostrar la insercin y el movimiento por los
nodos. Este cdigo utiliza insercin de nodos para crear un rbol binario, donde cada nodo contiene
una palabra y un contador de ocurrencias de esa palabra, y muestra estas palabras y contadores en
orden alfabtico mediante una variante del algoritmo de movimiento por rboles move-left-
examine-node-move-right:

// WC.java
NODO PADRE, NODO HIJO:

De acuerdo con la definicin de Winston (1992)1, una red semntica es una representacin en la
que:

Ciertas relaciones se llaman ramas. Cada rama conecta dos nodos, el nodo de la cabeza,
llamado nodo padre, y el nodo de la cola, llamado nodo hijo.
Si un nodo no tiene nodo padre, entonces es un nodo raz. Otros nodos slo tienen un nodo
padre.
Si un nodo no tiene nodo hijo, entonces se llama nodo hoja.
Cuando dos nodos estn conectados entre ellos por una cadena de dos o ms ramas, uno es
el ancestro y el otro el descendiente.
Posee constructores que conectan un nodo padre con un nodo hijo con una relacin
arbrea.
Posee lectores que listan los hijos de un nodo determinado o el padre de un nodo
determinado.

En ciencias de la informtica, 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 ms 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.

rbol binario

De Wikipedia, la enciclopedia libre

Saltar a navegacin, bsqueda


Para otros usos de este trmino vase rbol binario (desambiguacin).

En ciencias de la computacin, un rbol binario es una estructura de datos en el cual cada nodo:

No tiene hijos (hoja).


Tiene un hijo izquierdo y un hijo derecho.
Tiene un hijo izquierdo.
Tiene un hijo derecho.

Tipos de rboles binarios [editar]


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 casi-completo es un rbol en el que cada nodo que tiene un hijo derecho tambin
tiene un hijo izquierdo. Tener un hijo izquierdo no requiere que un nodo tenga un hijo
derecho. Dicho de otra forma, un rbol casi completo es un rbol donde para un hijo
derecho, hay siempre un hijo izquierdo.
Otra caracterstica que normalmente tendrn nuestros rboles es que todos los nodos
contengan el mismo nmero de punteros, es decir, usaremos la misma estructura para
todos los nodos del rbol. Esto hace que la estructura sea ms sencilla, y por lo tanto
tambin los programas para trabajar con ellos.
Tampoco es necesario que todos los nodos hijos de un nodo concreto existan. Es decir, que
pueden usarse todos, algunos o ninguno de los punteros de cada nodo.
Un rbol en el que en cada nodo o bien todos o ninguno de los hijos existe, se llama rbol
completo. En una cosa, los rboles se parecen al resto de las estructuras que hemos visto:
dado un nodo cualquiera de la estructura, podemos considerarlo como una estructura
independiente. Es decir, un nodo cualquiera puede ser considerado como la raz de un
rbol completo.
Existen otros conceptos que definen las caractersticas del rbol, en relacin a su tamao:

Orden: es el nmero potencial de hijos que puede tener cada elemento de rbol. De este
modo, diremos que un rbol en el que cada nodo puede apuntar a otros dos es de orden
dos, si puede apuntar a tres ser de orden tres, etc.
Grado: el nmero de hijos que tiene el elemento con ms hijos dentro del rbol. En el rbol
del ejemplo, el grado es tres, ya que tanto 'A' como 'D' tienen tres hijos, y no existen
elementos con ms de tres hijos.
Nivel: se define para cada elemento del rbol como la distancia a la raz, medida en nodos.
El nivel de la raz es cero y el de sus hijos uno.
Altura: la altura de un rbol se define como el nivel del nodo de mayor nivel. Como cada
nodo de un rbol puede considerarse a su vez como la raz de un rbol, tambin podemos
hablar de altura de ramas.
Los rboles de orden dos son bastante especiales, de hecho les dedicaremos varios
captulos. Estos rboles se conocen tambin como rboles binarios.
Frecuentemente, aunque tampoco es estrictamente necesario, para hacer ms fcil moverse
a travs del rbol, aadiremos un puntero a cada nodo que apunte al nodo padre. De este
modo podremos avanzar en direccin a la raz, y no slo hacia las hojas.
Es importante conservar siempre el nodo raz ya que es el nodo a partir del cual se
desarrolla el rbol, si perdemos este nodo, perderemos el acceso a todo el rbol.
El nodo tpico de un rbol difiere de los nodos que hemos visto hasta ahora para listas,
aunque slo en el nmero de nodos.

RECORRIDO EN RBOLES BINARIOS


Una de las operaciones mas importantes a realizar en un rbol binario es el recorrido de
los mismos, recorrer significa visitar los nodos del rbol en forma sistemtica, de tal
manera que todos los nodos del mismo sean visitados una sola vez.
Existen 3 formas diferentes de efectuar el recorrido y todas ellas de naturaleza
recursiva, estas son:

RECORRIDO PREORDEN: En el que se procesa el nodo y despus se procesan


recursivamente sus hijos.
RECORRIDO PREORDEN
VISITAR LA RAIZ
RECORRER EL SUBARBOL IZQUIERDO
RECORRER EL SUBARBOL DERECHO

RECORRIDO POSTORDEN: Donde el nodo dado se procesa despus de haber


procesado recursivamente a sus hijos.
Se presenta de la siguiente manera:
Recorrer el subrbol izquierdo en orden posterior.
Recorrer el subrbol derecho en orden posterior
Visita la Raz

RECORRIDO INORDEN: En este se procesa recursivamente el hijo izquierdo, luego


se procesa el nodo actual y finalmente se procesa recursivamente el hijo derecho. Puede
recorrer estructuras lineales tales como: colas, pilas y listas
Su recorrido se realiza:
Recorre rbol izquierdo
Recorre la raz
Recorre rbol derecho
Que son los rboles binarios de
bsqueda?
La bsqueda en rboles binarios es un mtodo de
bsqueda simple, dinmico y eficiente considerado como
uno de los fundamentales en Ciencia de la Computacin.
De toda la terminologa sobre rboles, tan slo recordar
que la propiedad que define un rbol binario es que cada
nodo tiene a lo ms un hijo a la izquierda y uno a la
derecha.Para construir los algoritmos consideraremos que
cada nodo contiene un registro con un valor clave a travs
del cual efectuaremos las bsquedas.En las
implementaciones que presentaremos slo se considerar
en cada nodo del rbol un valor del tipo t del Elemento
aunque en un caso general ese tipo estar compuesto por
dos: una clave indicando el campo por el cual se realiza la
ordenacin y una informacin asociada a dicha clave o
visto de otra forma, una informacin que puede ser
compuesta en la cual existe definido un orden.
rboles binarios
Un rbol binario es una estructura de datos de tipo
rbol en donde cada uno de los nodos del rbol puede
tener 0, 1, 2 subrboles llamados de acuerdo a su caso
como:
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.como se muestran los siguientes ejemplos:
Un rbol binario de bsqueda(ABB) es un rbol binario
con la propiedad de que todos los elementos almacenados
en el subrbol izquierdo de cualquier nodo x son menores
que el elemento almacenado en x ,y todos los elementos
almacenados en el subrbol derecho de x son mayores que
el elemento almacenado en x.
La figura 1 muestra dos ABB construidos en base al
mismo conjunto de enteros:
Obsrvese la interesante propiedad de que si se listan los
nodos del ABB en inorden nos da la lista de nodos
ordenada.Esta propiedad define un mtodo de ordenacin
similar al Quicksort,con el nodo raz jugando un papel
similar al del elemento de particin del Quicksort aunque
con los ABB hay un gasto extra de memoria mayor debido
a los punteros.La propiedad de ABB hace que sea muy
simple disear un procedimiento para realizar la bsqueda.
Para determinar si k est presente en el rbol la
comparamos con la clave situada en la raz, r.Si coinciden
la bsqueda finaliza con xito, si k<r es evidente que k,de
estar presente,ha de ser un descendiente del hijo izquierdo
de la raz,y si es mayor ser un descendiente del hijo
derecho.La funcin puede ser codificada fcilmente de la
siguiente forma:

#define ABB_VACIO NULL#define TRUE 1#define


FALSE 0typedef int tEtiqueta /*Algn tipo
adecuado*/typedef struct tipoceldaABB{ struct
tipoceldaABB *hizqda,*hdrcha; tEtiqueta etiqueta;
}*nodoABB;typedef nodoABB ABB;
Es conveniente hacer notar la diferencia entre este
procedimiento y el de bsqueda binaria.En ste podra
pensarse en que se usa un rbol binario para describir la
secuencia de comparaciones hecha por una funcin de
bsqueda sobre el vector.En cambio en los ABB se
construye una estructura de datos con registros conectados
por punteros y se usa esta estructura para la bsqueda.El
procedimiento de construccin de un ABB puede basarse
en un procedimiento de insercin que vaya aadiendo
elementos al rbol. Tal procedimiento comenzara mirando
si el rbol es vaco y de ser as se creara un nuevo nodo
para el elemento insertado devolviendo como rbol
resultado un puntero a ese nodo.Si el rbol no est vaci se
busca el elemento a insertar como lo hace el
procedimiento pertenece slo que al encontrar un puntero
NULL durante la bsqueda, se reemplaza por un puntero a
un nodo nuevo que contenga el elemento a insertar.El
cdigo podra ser el siguiente:
void Inserta(tElemento x,ABB *t) { if(!(*t))
{ *t=(nodoABB)malloc(sizeof(struct tipoceldaABB));
if(!(*t)){ error("Memoria Insuficiente."); } (*t)-
>etiqueta=x; (*t)->hizqda=NULL; (*t)-
>hdrcha=NULL; } else if(x<(*t)->etiqueta)
inserta(x,&((*t)->hizqda)); else
inserta(x,&((*t)->hdrcha));}
Por ejemplo supongamos que queremos construir un
ABB a partir del conjunto de enteros {10,5,14,7,12}
aplicando reiteradamente el proceso de insercin.El
resultado es el que muestra la figura 2.
TERMINOLO

GIA
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 INTERIOR. Es un nodo que no es raz ni
Terminal.
GRADO. Es el nmero de descendientes directos de un
determinado nodo.
GRADO DEL ARBOL 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.

rboles AVL

El rbol AVL toma su nombre de las iniciales de los apellidos de sus


inventores, Adelson-Velskii y Landis. Lo dieron a conocer en la
publicacin de un artculo en 1962: "An algorithm for the
organization of information" ("Un algoritmo para la organizacin de
la informacin").

Los rboles binarios de bsqueda tal y como los hemos visto,


adolecen del problema de
que en el peor de los casos pueden tender parcialmente hacia el
rbol degenerado, de manera que
la bsqueda de un elemento cualquiera puede ser de un orden
superior a O(lg n), y tender a O(n).
Este problema queda solucionado con los rboles AVL, o
balanceados en altura
Los rboles AVL estn siempre equilibrados de tal modo que para
todos los nodos, la altura de la rama izquierda no difiere en ms de
una unidad de la altura de la rama derecha.

Un rbol AVL es un rbol binario de busqueda en el cual para cada


nodo las alturas de los subrboles difieren a lo sumo en uno.

Factor de equilibrio
Cada nodo, adems de la informacin que se pretende almacenar,
debe tener los dos punteros a los rboles derecho e izquierdo, igual
que los rboles binarios de bsqueda (ABB), y adems el dato que
controla el factor de equilibrio.

El factor de equilibrio es la diferencia entre las alturas del rbol


derecho y el izquierdo:

Insercin
La insercin en un rbol de AVL puede ser realizada insertando el
valor dado en el rbol como si fuera un rbol de bsqueda binario
desequilibrado y despus retrocediendo hacia la raz, rotando
sobre cualquier nodo que pueda haberse desequilibrado durante
la insercin.

Extraccin
El problema de la extraccin puede resolverse en O(log n) pasos.
Una extraccin trae consigo una disminucin de la altura de la
rama donde se extrajo y tendr como efecto un cambio en el
factor de equilibrio del nodo padre de la rama en cuestin,
pudiendo necesitarse una rotacin.
Esta disminucin de la altura y la correccin de los factores de
equilibrio con sus posibles rotaciones asociadas pueden
propagarse hasta la raz

Bsqueda
Las bsquedas se realizan de la misma manera que en los ABB,
pero al estar el rbol equilibrado la complejidad de la bsqueda
nunca exceder de O(log n).

RBOLES BINARIOS DE BUSQUEDA (ABB)


Definicin:
Un rbol es una estructura de datos no lineal y homognea en el que cada elemento
puede tener varios elementos posteriores, pero tan slo puede tener un elemento
anterior.

Buscar un elemento

Si el rbol est vaco, terminamos la bsqueda: el elemento no est en el rbol.


Si el valor del nodo raz es igual que el del elemento que buscamos, terminamos
la bsqueda con xito.
Si el valor del nodo raz es menor que el elemento que buscamos, continuaremos
la bsqueda en el rbol derecho.
El valor de retorno de una funcin de bsqueda en un ABB puede ser un puntero
al nodo encontrado, o NULL, si no se ha encontrado.

Insertar un elemento
Necesitamos un puntero auxiliar para conservar una referencia al padre del nodo
raz actual. El valor inicial para ese puntero es NULL.
Padre = NULL
nodo = Raz
Bucle: mientras actual no sea un rbol vaco o hasta que se encuentre el
elemento.

Eliminar un elemento
Para borrar un elemento tambin nos basamos en el algoritmo de bsqueda. Si el
elemento no est en el rbol no lo podremos borrar. Si est, hay dos casos posibles:

Se trata de un nodo hoja


Se trata de un nodo rama

Ejemplo:
rbol binario
Existen dos tipos de rboles binarios que se consideran especiales en funcin de ciertas
propiedades. Estos son los siguientes:

1) rbol binario equilibrado


2) rbol binario completo

rbol binario equilibrado


Es un rbol en el que en todos sus nodos se cumple la siguiente propiedad:

| altura (subrbol _ izquierdo) altura (subrbol _ derecho) | <= 1

Recorridos por rboles


Una de las cosas que debemos poder hacer con un rbol es poder movernos a travs de
la informacin que este contiene. El modo evidente de moverse a travs de las ramas de
un rbol es siguiendo las referencias de los nodos que las componen. Los recorridos
dependen en gran medida del tipo y propsito del rbol, pero hay ciertos recorridos que
usaremos frecuentemente. Se trata de aquellos recorridos que incluyen todo el rbol.

Hay 3 formas de recorrer un rbol


Pre-orden
In-orden
Post-orden

Recorrido Pre-orden (N I D)
En este recorrido lo primero que se obtiene o evala es el nodo, antes de recorrer las
ramas; posteriormente se recorre la rama izquierda y finalmente la rama derecha. El
orden es: Nodo Izquierda Derecha (N I D).
El recorrido Pre-orden de nuestro rbol de la Figura 3 es:
M E A R O N Q V
Y el recorrido Pre-orden del rbol de la Figura 5 es: N E A G R O V

Recorrido In-orden (I N D)
En este recorrido se procesa la primera rama (rama izquierda), despus el nodo y
finalmente la ultima rama (rama derecha). El orden es: Izquierda Nodo Derecha (I
N D).
El recorrido In-orden de nuestro rbol de la Figura 3 es:
AEMNOQRV
Y el recorrido In-orden del rbol de la Figura 5 es: A E G N O R V

Recorrido Post-orden (I D R)
En este recorrido se primero se procesan las ramas para finalmente procesar el nodo. El
orden de este recorrido es: Izquierda Derecha Nodo (I D N).
El recorrido Post-orden del rbol de la Figura 3 es: A E N Q O V R M
Y el recorrido Post-orden del rbol de la Figura 5 es: A G E O V R N

/* -------------------------------------------------------------------------------------------
EN ESTA SECCION IRIA EL TEMA OPRACIONES SOBRE ABB
CALCULAR NUMERO DE NODOS
COMPROBAR SI EL NODO ES HOJA
CALCULAR EL NIVEL DE UN NODO
CALCULAR LA ALTURA DE UN ARBOL

PERO NO ME FUE ENTREGADO POR EL EQUIPO, ASI QUE LO TENDRAN QUE


INVESTIGAR
--------------------------------------------------------------------------------------------------------------------*/

http://c.conclase.net/edd/index.php?cap=008#8_5
http://c.conclase.net/edd/index.php?cap=008b#8_6 Dobles
http://c.conclase.net/edd/index.php?cap=008c#8_7 equilibrados
Introduccin

Un rbol AVL (llamado as por las iniciales de sus inventores: Adelson-Velskii y Landis)
es un rbol binario de bsqueda en el que para cada nodo, las alturas de sus subrboles
izquierdo y derecho no difieren en ms de 1.

Rotaciones simples de nodos

Los reequilibrados se realizan mediante rotaciones.

Rotacin simple a la derecha (SD):


Esta rotacin se usar cuando el subrbol izquierdo de un nodo sea 2 unidades ms alto
que el derecho, es decir, cuando su FE sea de -2. Y adems, la raz del subrbol
izquierdo tenga una FE de -1, es decir, que est cargado a la izquierda.

Procederemos del siguiente modo:

Llamaremos P al nodo que muestra el desequilibrio, el que tiene una FE de -2. Y


llamaremos Q al nodo raz del subrbol izquierdo de P. Adems, llamaremos A al
subrbol izquierdo de Q, B al subrbol derecho de Q y C al subrbol derecho de P.

En el grfico que puede observar que tanto B como C tienen la misma altura (n), y A es
una unidad mayor (n+1). Esto hace que el FE de Q sea -1, la altura del subrbol que
tiene Q como raz es (n+2) y por lo tanto el FE de P es -2.

1. Pasamos el subrbol derecho del nodo Q como subrbol izquierdo de P. Esto


mantiene el rbol como ABB, ya que todos los valores a la derecha de Q siguen
estando a la izquierda de P.
2. El rbol P pasa a ser el subrbol derecho del nodo Q.
3. Ahora, el nodo Q pasa a tomar la posicin del nodo P, es decir, hacemos que la
entrada al rbol sea el nodo Q, en lugar del nodo P. Previamente, P puede que
fuese un rbol completo o un subrbol de otro nodo de menor altura.
En el rbol resultante se puede ver que tanto P como Q quedan equilibrados en cuanto
altura. En el caso de P porque sus dos subrboles tienen la misma altura (n), en el caso
de Q, porque su subrbol izquierdo A tiene una altura (n+1) y su subrbol derecho
tambin, ya que a P se aade la altura de cualquiera de sus subrboles.

Rotacin simple a la izquierda (SI):

Se trata del caso simtrico del anterior. Esta rotacin se usar cuando el subrbol
derecho de un nodo sea 2 unidades ms alto que el izquierdo, es decir, cuando su FE sea
de 2. Y adems, la raz del subrbol derecho tenga una FE de 1, es decir, que est
cargado a la derecha.
Procederemos del siguiente modo:

Llamaremos P al nodo que muestra el desequilibrio, el que tiene una FE de 2. Y


llamaremos Q al nodo raz del subrbol derecho de P. Adems, llamaremos A al
subrbol izquierdo de P, B al subrbol izquierdo de Q y C al subrbol derecho de Q.

En el grfico que puede observar que tanto A como B tienen la misma altura (n), y C es
una unidad mayor (n+1). Esto hace que el FE de Q sea 1, la altura del subrbol que tiene
Q como raz es (n+2) y por lo tanto el FE de P es 2.

1. Pasamos el subrbol izquierdo del nodo Q como subrbol derecho de P. Esto


mantiene el rbol como ABB, ya que todos los valores a la izquierda de Q siguen
estando a la derecha de P.
2. El rbol P pasa a ser el subrbol izquierdo del nodo Q.
3. Ahora, el nodo Q pasa a tomar la posicin del nodo P, es decir, hacemos que la
entrada al rbol sea el nodo Q, en lugar del nodo P. Previamente, P puede que
fuese un rbol completo o un subrbol de otro nodo de menor altura.
En el rbol resultante se puede ver que tanto P como Q quedan equilibrados en cuanto
altura. En el caso de P porque sus dos subrboles tienen la misma altura (n), en el caso
de Q, porque su subrbol izquierdo A tiene una altura (n+1) y su subrbol derecho
tambin, ya que a P se aade la altura de cualquiera de sus subrboles.