Está en la página 1de 26

INFORMATICA III

Capitulo VII
ESTRUCTURA DE DATOS

“Árboles Binarios”

Lic. Juan Samuel Cáceres


Árboles Binarios

Es un conjunto finito de uno o más nodos tales que existe un


nodo denominado raíz del árbol, en donde cada nodo puede tener
0, 1 ó 2 subarboles conocidos como subarbol izquierdo y
subarbol derecho. En un árbol binario ningún nodo puede tener
más de dos subárboles y cada nodo puede tener, cero, uno o dos
hijos (subárboles). Se conoce el nodo de la izquierda como hijo
izquierdo y el nodo de la derecha como hijo derecho
Árboles Binarios

Los Árboles son las estructuras de


datos mas utilizadas, pero también una
de las mas complejas. Los Árboles se
caracterizan por almacenar sus nodos
en forma jerárquica y no en forma
lineal como las Listas Ligadas, Colas,
Pilas, etc., de las cuales ya hemos
hablado en capítulos anteriores.
La imagen muestra la diferencia
entra las estructuras de datos lineales
y las no lineales como lo son los
Árboles.
Datos importantes de los Árboles Binarios
Para comprender mejor qué es un árbol comenzaremos explicando cómo está estructurado.
Nodos: Se le llama Nodo a cada elemento que contiene un Árbol.
Nodo Raíz: Se refiere al primer nodo de un Árbol, Solo un nodo del Árbol puede ser la Raíz.
Nodo Padre: Se utiliza este termino para llamar a todos aquellos nodos que tiene al menos un hijo.
Nodo Hijo: Los hijos son todos aquellos nodos que tiene un padre.
Nodo Hermano: Los nodos hermanos son aquellos nodos que comparte a un mismo padre en común dentro de la estructura.
Nodo Hoja: Son todos aquellos nodos que no tienen hijos, los cuales siempre se encuentran en los extremos de la estructura.
Nodo Rama: Estos son todos aquellos nodos que no son la raíz y que además tiene al menos un hijo.

La imagen
muestra de
forma gráfica
cuales son los
nodos Raíz,
Rama, Hoja.
La siguiente imagen muestra de forma gráfica los nodos Padre, Hijo y
Hermanos
Niveles de un Árbol Binario

Los árboles a demás de los nodos tienen otras propiedades importantes que son utilizadas en
diferentes ámbitos los cuales son:

Nivel: Nos referimos como nivel a cada generación dentro del árbol. Por ejemplo, cuando a un
nodo hoja le agregamos un hijo, el nodo hoja pasa a ser un nodo rama pero a demás el árbol
crece una generación por lo que el Árbol tiene un nivel mas. Cada generación tiene un número
de Nivel distinto que las demás generaciones.

 Un árbol vacío tiene 0 niveles


 El nivel de la Raíz es 1
 El nivel de cada nodo se calculado contando cuantos nodos existen sobre él, hasta llegar a la raíz y se
le adiciona el valor 1, y de forma inversa también se podría, contar cuantos nodos existen desde la raíz
hasta el nodo buscado y se le adiciona el valor 1.
Altura de Árboles Binarios
Altura: Le llamamos Altura al número máximo de niveles de un Árbol.

En la imagen se
muestran los Niveles y
la Altura de un Árbol.

La altura es calculado mediante recursividad tomando el nivel mas grande de los dos sub-árboles de
forma recursiva de la siguiente manera:
altura = max(altura(hijo1), altura(hijo2),altura(hijoN)) + 1
Peso de Árboles Binarios
Peso: Conocemos como peso al número de nodos que tiene un Árbol. Este factor es importante por
que nos da una idea del tamaño del árbol y el tamaño en memoria que nos puede ocupar en tiempo de
ejecución(Complejidad Espacial en análisis de algoritmos).

La imagen nos muestra cómo se


calcula el peso de un Árbol, el cual
es la suma de todos sus nodos,
sin importar el orden en que sean
contados..

El peso se puede calcular mediante cualquier tipo de recorrido el cual vaya contando los nodos a
medida que avanza sobre la estructura. El peso de un árbol es igual a la suma del peso de los sub-
árboles hijos + 1
peso = peso(hijo1) + peso(hijo2) + peso(hijoN)+ 1
Árboles Binarios Completos
Un binario se denomina completo si todos sus nodos, excepto las hojas, tienen
exactamente dos subarboles. Un árbol binario completo de profundidad n es un
árbol en el que para cada nivel, del O al nivel n- 1 tiene un conjunto lleno de
nodos y todos los nodos hoja a nivel n ocupan las posiciones más a la izquierda
del árbol.
Un árbol binario completo que contiene 2" nodos a nivel n es un árbol lleno. Un
árbol lleno es un árbol binario que tiene el máximo número de entradas para su
altura. Esto sucede cuando el Último nivel está lleno.

OBSERVACIÓN
Árbol Completo: De Altura n es un árbol en el que para c/nivel, del 0 al n–1, está
lleno de nodos. Todos los nodos hoja a nivel n ocupan posiciones a la izquierda.
Árbol Lleno: Un árbol lleno es un árbol binario que tiene el máximo número de
entradas para su altura. Esto sucede cuando el Último nivel está lleno.
Árboles Binarios Completos

Cómo calcular el número máximo de nodos que puede tener un árbol


binario y así determinar si está lleno:
Altura (h) = 4
Número de Nodos = 2h-1 = 24-1 = 16-1 = 15
Peso = 15
Búsquedas Secuenciales – En profundidad

Un proceso para desplazarse atravez de un árbol en forma tal que, cada


nodo sea visitado una y sólo una vez se llama recorrido del árbol. Cuando
un árbol se recorre, su colección de nodos se revisa.

Recorrido de un Árbol Binario


Para visualizar o consultar los datos almacenados en un árbol se necesita
recorrer el árbol y visitar los nodos del mismo. Existen diferentes métodos
o estrategias de recorrido de árbol.
El recorrido en un árbol binario requiere que cada nodo del árbol sea
procesado(visitado) una vez y solo una vez en una secuencia
predeterminada.
Recorrido de un Árbol Binario

El recorrido de un árbol supone visitar cada nodo sólo una vez. Dado un árbol binario que
consta de un raíz, un subárbol izquierdo y un subárbol derecho se pueden definir tres tipos de
secuencia de recorrido en profundidad.
N N N

I D I D I D
NID IND IDN

La designación tradicional de los recorridos utiliza un nombre para el nodo raíz (N), para el
subárbol.
Según sea la estrategia a seguir, los recorridos se conocen como enorden, preorden, posorden.
Preorden (nodo-izquierdo-derecho) (NID)
Enorden (izquierdo-nodo-derecho) (IND)
Posorden (izquierdo-derecho-nodo) (IDN)
Recorrido de un Árbol Binario

El recorrido preorden (NID) conlleva los


siguientes pasos, en los que el nodo raíz va
antes que los subárboles:

1. Recorrer la raíz (N).


2. Recorrer el subárbol izquierdo (I) en preorden.
3. Recorrer el subárbol derecho (D) en preorden.
Recorrido Preorden A B D H I E J K C F L MG N O
Recorrido de un Árbol Binario

El recorrido inorde (IND) procesa primero el subárbol izquierdo, después


el raíz y a continuación el subárbol derecho. El significado de in es que la
raíz se procesa entre los subárboles

NID IDN

En la imagen se muestra como es el recorrido


In-Orden, Podemos apreciar que la Raíz no es
el primer elemento en ser impreso pues este
recorrido recorre su rama izquierda, luego la
raíz del sub-árbol y luego la rama derecha.
Recorrido Inorden H D I B J E K A L F MC N G O
Recorrido de un Árbol Binario

Recorrido Posorden: Se recorre en posorden cada uno de los sub-árboles y


al final se recorre la raíz

NID

En la imagen podemos observar como se


realiza el recorrido en Pos-Orden, Sin embargo
es importante notar que el primer nodo que se
imprime no es la Raíz pues en este recorrido la
Raíz de cada Sub-Árbol es procesado al final,
ya que toda su descendencia ha sido
procesada primero
Recorrido Posorden H I D J K E B L MF N O G C A
Búsquedas Secuenciales – En amplitud

Se recorre primero la raíz, luego se recorren los demas nodos ordenados por
el nivel al que pertenecen en orden de Izquierda a derecha.
Este tipo de búsqueda se caracteriza por que la búsqueda se hace nivel por
nivel y de izquierda a derecha.
Recorrido en amplitud A B C D E F G H I J K L MN O
Búsquedas Secuenciales – En amplitud

En la imagen podemos observar que el árbol es recorrido en su totalidad


pero esto no siempre es así, ya que el algoritmo se detiene cuando el
elemento buscado es encontrado.
Búsquedas Secuenciales – En amplitud

Si observamos el código de forma minuciosa podemos observar dos puntos


muy interesantes, el primero es que esta función no es recursiva, y la segunda
es que se utiliza una Cola para controlar el flujo del recorrido.

Los pasos para hacer el recorrido es el siguiente:


1. Se agrega la Raíz a la cola de nodos por visitar
2. Mientras que la cola no este vacía se saca el primer elemento de la cola y
continuamos con el paso 3, Pero; si la cola esta vacía entonces nos vamos
al paso 5.
3. Se valida si el elemento sacado de la pila es el que estamos buscando, Si lo
es, entonces hemos terminado, Si no lo es se agregan todos los hijos del
nodo a la pila de nodos pendientes por procesar.
4. Regresamos al paso 2.
5. Terminamos sin un resultado
Árbol de Búsqueda Binaria

Los árboles vistos hasta ahora no tienen un orden definido; sin embargo, los
árboles binarios ordenados tienen sentido. Estos árboles se denominan
árboles binarios de búsqueda

Un árbol binario de búsqueda es aquel que dado un nodo, todos los datos
del subárbol izquierdo son menores que los datos de ese nodo, mientras que
todos los datos del subárbol derecho son mayores que sus propios datos.

7 28

5 9 18 35

3 6 14 21
Árbol de Búsqueda Binaria

La búsqueda consiste acceder a la raíz del árbol, si el elemento a localizar


coincide con éste la búsqueda ha concluido con éxito, si el elemento es
menor se busca en el subárbol izquierdo y si es mayor en el derecho.
Si se alcanza un nodo hoja y el elemento no ha sido encontrado se supone
que no existe en el árbol.
Si buscamos el valor 8 en estos dos árboles el proceso sería el siguiente
En este árbol no existe En este árbol sí existe 8 == 28 ? : F
8 == 7 ? : F 8 < 28 ? : V
8<7?:F 7 28 I == null ? : F
8>7?:V 8 == 18 ? : F
D == null ? : F 8 < 18 ? : V
8 == 9 ? : F 5 9 18 35
I == null ? : F
8<9?:V 8 == 8 ? : V
I == null ? : V Fin de Búsqueda
Fin de Búsqueda 3 6 8 21
Se encontró el
No hay resultado valor buscado
Inserción en Árbol de Búsqueda Binaria

Para insertar un elemento en el árbol A se ha de comprobar, en primer lugar


que el elemento no se encuentra en el árbol ya que su caso no precisa ser
insertado. Si el elemento existe, la inserción se realiza en un nodo en el que
al menos uno de los dos punteros IZQ o DER tenga un valor de Nulo.

Por la anterior condición se desciende en árbol a partir del nodo raíz,


dirigiéndose de izquierda a derecha de un nodo. Cuando se alcanza un nodo
en el árbol en que no se puede continuar el nuevo elemento se engancha en
la izquierda o derecha de este nodo en función de que su valor sea inferior o
superior al nodo alcanzado
Inserción en Árbol de Búsqueda Binaria

Evolución de la inserción del elemento 5 en un Árbol Binario de Búsqueda


R = Raíz R=4
HI = Hijo Izquierdo F = Falso 5 == 4 ? : F
HD = Hijo Derecho V = Verdadero 5<4?:F
5>4?:V
HD == null ? : F
5 == 16 ? : F
5 < 16 ? : V
HI == null ? : F
5 == 10 ? : F
5 < 10 ? : V
HI == null ? : F
5 == 7 ? : F
5<7?:V
HI == null ? : V

El valor 5 se convierte
en Hijo Izquierdo de 7
Conclusión

Como hemos observado los arboles son estructuras bastante complejas,


tiene una gran aplicaciones en la ciencia y en la programación
convencional. En los últimos años este tipo de estructuras ha sido utilizadas
con mucha frecuencia en la Inteligencia artificial.

En este módulo hemos visto los puntos más relevantes a tener en cuenta de
lo que son los árboles y los principales métodos de búsqueda, sin embargo
estamos lejos de cubrir este tema en profundidad ya que existen
muchísimos tipos de operaciones y algoritmos que se pueden realizar sobre
estas estructuras de datos

También podría gustarte