You are on page 1of 8

09/10/13

rbol binario - Wikipedia, la enciclopedia libre

rbol binario
De Wikipedia, la enciclopedia libre En ciencias de la computacin, 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. Usos comunes de los rboles binarios son los rboles binarios de bsqueda, los montculos binarios y Codificacin de Huffman.

ndice
1 Definicin de teora de grafos 2 Tipos de rboles binarios 3 Implementacin en C 4 Recorridos sobre rboles binarios 4.1 Recorridos en profundidad 4.1.1 Recorrido en preorden 4.1.2 Recorrido en postorden 4.1.3 Recorrido en enorden 4.2 Recorridos en amplitud (o por niveles) 4.3 Creacin de rboles a partir de los recorridos 5 Mtodos para almacenar rboles binarios 6 Codificacin de rboles n-arios como rboles binarios 7 Vase tambin 8 Enlaces externos

Definicin de teora de grafos


En teora de grafos, se usa la siguiente definicin: Un rbol binario es un grafo conexo, acclico y no dirigido tal que el grado de cada vrtice no es mayor a 3. De esta forma slo existe un camino entre un par de nodos. Un rbol binario con enraizado es como un grafo que tiene uno de sus vrtices, llamado raz, de grado no mayor a 2. Con la raz escogida, cada vrtice tendr un nico padre, y nunca ms de dos hijos. Si rehusamos el requerimiento de la conectividad, permitiendo mltiples componentes conectados en el grafo, llamaremos a esta ltima estructura un bosque.

Tipos de rboles binarios


Un rbol binario es un rbol con raz en el que cada nodo tiene como mximo dos hijos.
es.wikipedia.org/wiki/rbol_binario

Un rbol binario sencillo de tamao 9, 4 niveles y altura 3 (altura = mximo nivel - 1), con un nodo raz cuyo valor es 2.

1/8

09/10/13

rbol binario - Wikipedia, la enciclopedia libre

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.

Implementacin en C
Un rbol binario puede declararse de varias maneras. Algunas de ellas son: Estructura con manejo de memoria dinmica, siendo el puntero que apunta al rbol de tipo tArbol:

t y p e d e fs t r u c tn o d o{ i n tc l a v e ; s t r u c tn o d o* i z d o ,* d c h o ; } N o d o ;

Estructura con arreglo indexado:


t y p e d e fs t r u c tt A r b o l { i n tc l a v e ; t A r b o lh I z q u i e r d o ,h D e r e c h o ; }t A r b o l ; t A r b o l r b o l [ N U M E R O _ D E _ N O D O S ] ;

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:
i n t r b o l [ N U M E R O _ D E _ N O D O S ] ;

Recorridos sobre 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:
es.wikipedia.org/wiki/rbol_binario 2/8

09/10/13

rbol binario - Wikipedia, la enciclopedia libre

Recorrido en preorden 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 metodo 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.
v o i dp r e o r d e n ( t A r b o l* a ) { i f( a! =N U L L ){ t r a t a r ( a ) ; p r e o r d e n ( a > h I z q u i e r d o ) ; p r e o r d e n ( a > h D e r e c h o ) ; } }

/ / R e a l i z au n ao p e r a c i ne nn o d o

Implementacin en pseudocdigo de forma iterativa:


p u s h ( s , N U L L ) ; / / i n s e r t a m o se nu n ap i l a( s t a c k )e lv a l o rN U L L ,p a r aa s e g u r a r n o sd eq u ee s t v a c a p u s h ( s , r a z ) ; / / i n s e r t a m o se ln o d or a z M I E N T R A S( s< >N U L L )H A C E R p=p o p ( s ) ; / / s a c a m o su ne l e m e n t od el ap i l a t r a t a r ( p ) ; / / r e a l i z a m o so p e r a c i o n e ss o b r ee ln o d op S I( D ( p )< >N U L L ) / / p r e g u n t a m o ss ipt i e n e r b o ld e r e c h o E N T O N C E Sp u s h ( s , D ( p ) ) ; F I N S I S I( I ( p )< >N U L L ) / / p r e g u n t a m o ss ipt i e n e r b o li z q u i e r d o E N T O N C E Sp u s h ( s , I ( p ) ) ; F I N S I F I N M I E N T R A S

Recorrido en postorden 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 metodo 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.
v o i dp o s t o r d e n ( t A r b o l* a ) { i f( a! =N U L L ){ p o s t o r d e n ( a > h I z q u i e d o ) ; p o s t o r d e n ( a > h D e r e c h o ) ; t r a t a r ( a ) ; } }

/ / R e a l i z au n ao p e r a c i ne nn o d o

Recorrido en enorden

es.wikipedia.org/wiki/rbol_binario

3/8

09/10/13

rbol binario - Wikipedia, la enciclopedia libre

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 metodo seria seguir el orden: nodo izquierda,nodo raz,nodo derecha. En el rbol de la figura el recorrido en enorden sera: 2, 7, 5, 6, 11, 2, 5, 4, 9. Esquema de implementacin:
v o i de n o r d e n ( t A r b o l* a ) { i f( a! =N U L L ){ e n o r d e n ( a > h I z q u i e r d o ) ; t r a t a r ( a ) ; e n o r d e n ( a > h D e r e c h o ) ; } }

/ / R e a l i z au n ao p e r a c i ne nn o d o

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:

v o i da r b o l _ r e c o r r i d o _ a n c h( t i p o _ A r b o l *A ){ t i p o _ C o l ac o l a _ n o d o s ;/ /e s t ac o l ae s t ai m p l e m e n t a d ap r e v i a m e n t e ,a l m a c e n ap u n t e r o s( p o s i c i o n e sd e t i p o _ P o sn o d o _ a c t u a l ;/ /e s t ee su np u n t e r ol l e v a r ae lr e c o r r i d o i f( v a c i o ( A ) )/ /s ie l r b o le s t av a c i o ,s a l i m o s r e t u r n ; c o l a _ i n i c i a l i z a ( & c o l a _ n o d o s ) ;/ /o b v i o ,yn e c e s a r i o c o l a _ e n q u e u e ( A ,& c o l a _ n o d o s ) ;/ /s ee n c o l al ar a z w h i l e( ! v a c i a ( & c o l a _ n o d o s ) ){/ /m i e n t r a sl ac o l an os ev a c i es er e a l i z a r ae lr e c o r r i d o n o d o _ a c t u a l=c o l a _ d e q u e u e ( & c o l a _ n o d o s )/ /d el ac o l as a l d r a nl o sn o d o so r d e n a d o sp o rn i v e l

p r i n t f ( " % c , " ,n o d o _ a c t u a l > i n f o ) ;/ /s e" p r o c e s a "e ln o d od o n d ev ae lr e c o r r i d o ,e ne s t ec a s os i f( n o d o _ a c t u a l > i z q! =n u l l )/ /s ie x i s t e ,p o n e m o se lh i j oi z q u i e r d oe nl ac o l a c o l a _ e n q u e u e ( n o d o _ a c t u a l > i z q ,& c o l a _ n o d o s ) ; i f( n o d o _ a c t u a l > d e r! =n u l l )/ /s ie x i s t e ,p o n e m o se lh i j od e r e c h oe nl ac o l a c o l a _ e n q u e u e ( n o d o _ a c t u a l > d e r ,& c o l a _ n o d o s ) ; }/ /a lv a c i a r s el ac o l as eh a nv i s i t a d ot o d o sl o sn o d o sd e l r b o l }
es.wikipedia.org/wiki/rbol_binario 4/8

09/10/13

rbol binario - Wikipedia, la enciclopedia libre

Creacin de rboles a partir de los recorridos


Para poder dibujar un rbol binario en base a los recorridos, se necesitan por lo menos dos de los recorridos de profundidad (en caso de que no se repitan los nodos, ya que si se repiten los nodos es recomendable tener los tres recorridos), ya sean inorden y preorden o inorden y postorden, la nica diferencia entre usar el recorrido en preorden o postorden es que en preorden se usa el primer nodo para encontrar la raz y en postorden se usa el ltimo nodo. El mtodo consiste en ir dividiendo los recorridos del rbol en pequeos subrboles, se va encontrando la raz con el preorden o postorden y se divide en dos subrboles basndonos en el recorrido en inorden. En el caso de que los nodos se repitan es conveniente tener los 3 recorridos para identificar ms fcilmente cul de los nodos es la raz actual. Para el rbol de la figura corresponden los siguientes recorridos: Preorden Inorden Postorden Para encontrar la raz es necesario tener el recorrido preorden o postorden, ya que la raz es el primer nodo o el ltimo nodo respectivamente. En este caso la raz es el . Una vez encontrada la raz, es necesario saber su posicin en el recorrido inorden, del paso anterior se tiene el nodo , pero existen 2 nodos con ese valor, el primero y el de en medio. Si el primer dos es la raz, entonces no existe ninguna rama del lado izquierdo, en ese caso la siguiente raz de acuerdo con el recorrido en postorden es y de acuerdo con preorden es , lo cual es una incongruencia, de esa forma sabemos que el otro es la raz. Entonces marcamos la raz en el recorrido inorden: Preorden Inorden Postorden El recorrido inorden, es un recorrido de los rboles binarios en los que se empieza desde el nodo que se encuentra ms a la izquierda de todos, sigue con la raz y termina con los nodos del lado derecho, entonces, como en el recorrido inorden ya encontramos la raz, la parte izquierda representa el subrbol izquierdo y la parte derecha representa el subrbol derecho.

es.wikipedia.org/wiki/rbol_binario

5/8

09/10/13

rbol binario - Wikipedia, la enciclopedia libre

En los recorridos tenemos 5 nodos a la izquierda del y a la derecha se encuentran 3 valores, entonces podemos crear los recorridos para el subrbol izquierdo y el subrbol derecho

Subrbol derecho Preorden Inorden Postorden

Subrbol derecho Preorden Inorden Postorden

Se sigue repitiendo el proceso hasta encontrar todos los nodos del rbol, en este punto la siguiente raz izquierda es el y la raz derecha el . Cuando se llegan a nodos en los que nicamente cuentan con una rama es necesario saber que rama es la derecha y cul es la izquierda (para algunos rboles con balanceo como los AVL), por ejemplo siguiendo la rama de la derecha partiendo de que el es la raz el recorrido inorden es entonces el siguiente nodo va a la derecha, no hay nodo a la izquierda, despus, los recorridos para el subrbol son: Preorden Inorden Postorden Finalmente el siguiente nodo se coloca a la izquierda del . Este mtodo es 100% efectivo cuando no existen nodos repetidos, cuando los nodos se repiten la complejidad aumenta para poder descubrir cul es el nodo raz en el recorrido inorden.

Mtodos para almacenar rboles binarios


Los rboles binarios pueden ser construidos a partir de lenguajes de programacin de varias formas. En un lenguaje con registros y referencias, los rboles binarios son construidos tpicamente con una estructura de nodos y punteros en la cual se almacenan datos, cada uno de estos nodos tiene una referencia o puntero a un nodo izquierdo y a un nodo derecho denominados hijos. En ocasiones, tambin contiene un puntero a un nico nodo. Si un nodo tiene menos de dos hijos, algunos de los punteros de los hijos pueden ser definidos como nulos para indicar que no dispone de dicho nodo. En la figura adjunta se puede observar la estructura de dicha implementacin.

es.wikipedia.org/wiki/rbol_binario

6/8

09/10/13

rbol binario - Wikipedia, la enciclopedia libre

Los rboles binarios tambin pueden ser almacenados como una estructura de datos implcita en vectores, y si el rbol es un rbol binario completo, este mtodo no desaprovecha el espacio en memoria. Tomaremos como notacin la siguiente: si un nodo tiene un ndice i, sus hijos se encuentran en ndices 2i + 1 y 2i + 2, mientras que sus padres (si los tiene) se encuentra en el ndice (partiendo de que la raz tenga ndice cero). Este mtodo

tiene como ventajas el tener almacenados los datos de forma ms compacta y por tener una forma ms rpida y eficiente de localizar los datos en particular durante un preoden transversal. Sin embargo, desperdicia mucho espacio en memoria.

Codificacin de rboles n-arios como rboles binarios


Hay un mapeo uno a uno entre los rboles generales y rboles binarios, el cual en particular es usado en Lisp para representar rboles generales como rboles binarios. Cada nodo N ordenado en el rbol corresponde a un nodo N' en el rbol binario; el hijo de la izquierda de N es el nodo correspondiente al primer hijo de N, y el hijo derecho de N' es el nodo correspondiente al siguiente hermano de N, es decir, el prximo nodo en orden entre los hijos de los padres de N. Esta representacin como rbol binario de un rbol general, se conoce a veces como un rbol binario primer hijo hermano, o un rbol doblemente encadenado. Una manera de pensar acerca de esto es que los hijos de cada nodo estn en una lista enlazada, encadenados junto con el campo derecho, y el nodo slo tiene un puntero al comienzo o la cabeza de esta lista, a travs de su campo izquierdo. Por ejemplo, en el rbol de la izquierda, la A tiene 6 hijos (B, C, D, E, F, G). Puede ser convertido en el rbol binario de la derecha. Un ejemplo de transformar el rbol n-ario a un rbol binario cmo pasar de rboles n-arios a rboles FLOFO.
es.wikipedia.org/wiki/rbol_binario 7/8

09/10/13

rbol binario - Wikipedia, la enciclopedia libre

El rbol binario puede ser pensado como el rbol original inclinado hacia los lados, con los bordes negros izquierdos representando el primer hijo y los azules representado los siguientes hermanos. Las hojas del rbol de la izquierda seran escritas en Lisp como:
( ( ( NO )IJ )CD( ( P )( Q ) )F( M ) )

Que se ejecutar en la memoria como el rbol binario de la derecha, sin ningn tipo de letras en aquellos nodos que tienen un hijo izquierdo.

Vase tambin
rbol (estructura de datos) rbol multirrama rbol binario de bsqueda rbol de Fibonacci Particin de espacio binario

Enlaces externos
rbol binario de bsqueda en PHP (http://mmengineer.blogspot.com/2007/10/aboles-binarios-debusqueda-php.html) Obtenido de http://es.wikipedia.org/w/index.php?title=rbol_binario&oldid=68709180 Categora: rboles (estructura) Esta pgina fue modificada por ltima vez el 30 jul 2013, a las 13:04. El texto est disponible bajo la Licencia Creative Commons Atribucin Compartir Igual 3.0; podran ser aplicables clusulas adicionales. Lanse los trminos de uso para ms informacin. Wikipedia es una marca registrada de la Fundacin Wikimedia, Inc., una organizacin sin nimo de lucro.

es.wikipedia.org/wiki/rbol_binario

8/8

You might also like