Está en la página 1de 9

Estructuras de datos- A

Unidad 3: Estructuras no lineales


Conceptos generales de árboles

René Ornelis
Vacaciones de diciembre 2023
Contenido
1 Introducción ............................................................................................................................. 4
2 Otras aplicaciones .................................................................................................................... 4
3 La teoría de grafos y los árboles .............................................................................................. 5
3.1 Terminología .................................................................................................................... 6
4 Representaciones de árboles en memoria ................................................................................ 7
4.1 Codificación de árboles n-arios como árboles binarios ................................................... 8
5 Recorridos ................................................................................................................................ 8
Índice de figuras
Figura 1: Árbol de directorios y archivos ....................................................................................... 5
Figura 2: Terminología de árboles .................................................................................................. 6
Figura 3: Representación dinámica ................................................................................................. 7
Figura 4: Representación estática ................................................................................................... 7
Figura 5: Representación primer hijo/siguiente hermano ............................................................... 8
Conceptos generales de árboles
1 Introducción
En esta unidad vamos la estructura de datos llamada árbol. Como vimos en la unidad
anterior, los arreglos lexicográficos suelen ser una solución bastante eficiente en su tiempo de
respuesta, con un orden constante ( O(n) = k ), lo que significa que siempre tardará el mismo
tiempo, sin importar la cantidad de datos, ya que sólo depende del número de dimensiones (k).
Sin embargo, hay casos en los cuales no aplica el uso de arreglos:

1. Memoria limitada: Los arreglos lexicográficos requieren que se disponga de un bloque de


memoria continuo, con capacidad para almacenar todos los posibles elementos del
arreglo. Esto muchas veces no es factible porque la memoria disponible puede no ser
suficiente para lo requerido. Aquí puede ser más útil un arreglo esparcido en vez de un
lexicográfico
2. Acceso por índices: Cuando los elementos de la estructura no están mapeados por un
sistema de coordenadas, los arreglos no son de utilidad. Si tenemos necesidad de una
estructura donde los elementos se mapean por medio de una llave, como nombre, carnet, id,
etc. Los arreglos no son de utilidad

En estos casos, se necesita una estructura que pueda acceder cada elemento por una llave y
no un sistema de coordenadas, y es aquí donde nos resulta de utilidad los árboles como estructura
contenedora de elementos.

2 Otras aplicaciones
Adicional a ser un contenedor, los árboles tienen una gran cantidad de aplicaciones, entre
ellos están los:

• Árboles de costo mínimo: Dado un grafo que representa un mapa de un recorrido a


realizar, donde los nodos representan los puntos a detenerse (estaciones o paradas) y los
lados representan los caminos entre cada estación, si cada camino tiene asociado un valor
de costo, que puede ser distancia o tiempo, entonces es posible determinar la ruta donde
se minimiza el costo del recorrido. Por ejemplo: la aplicación Waze utiliza estos
conceptos.
• Árboles de expresiones: Son utilizadas en los compiladores para procesar y evaluar
expresiones matemáticas como x= y*z + 5 o x=y*(z+5), las cuales son totalmente
diferentes.
• Árboles de decisión: Si tenemos un árbol donde cada nodo representa un estado de
condiciones y los hijos de dicho nodo representan los posibles estados a los que se puede
pasar, entonces un sistema puede tomar una decisión "inteligente", si a cada nodo le
asociamos un valor de costo o beneficio y cada lado tiene asociado la probabilidad de
ocurrencia de la transición de un estado a
otro.
• Jerarquías: En general, los árboles nos
ayudan a representar cualquier jerarquía,
como la organización de una empresa o
un sistema de archivos, en el que cada
archivo o directorio es representado por
un nodo, los directorios son nodos
internos (con hijos) y los archivos son
nodos hoja (sin hijos), tal como se
muestra en la Figura 1. Figura 1: Árbol de directorios y archivos

3 La teoría de grafos y los árboles


Los árboles son concepto de la teoría de grafos, específicamente un árbol orientado. Por lo
que es bueno recordar algunos conceptos de grafos:

Grafo: es una colección de vértices V, y una colección de lados L, donde por cada lado en
L, hay una línea que une un par de vértices en V

Vértices Adyacentes: son los que están unidos por un lado

Ruta: de longitud n, es una secuencia de lados l1l2…ln, donde lado lk comparte un vértice
en común con el lado precedentelk-1, y un vértice en común con el lado subsiguiente lk+1,
para 1 < k < n. Otra definición es: Ruta de longitud n es un conjunto de vértices v0v1…vn,
tal que vk-1 es adyacente a vk, para 1 < k < n.

Ruta Simple: cuando todos los vértices en él son distintos, excepto posiblemente por el
primero y último

Ciclo: es una ruta de longitud tres o más, que conecta un vértice v con él mismo.

Ciclo Simple: es un ciclo, cuya ruta es simple.

Grafo Conectado: es aquel donde existe, al menos una ruta de un vértice a otro.

Árbol libre: es un grafo finito y conectado, sin ciclos simples.

Árbol orientado: es un grafo donde cada lado L es un par de vértices de la forma (v, v’)
donde se dice que v es el origen y v’ es el destino y la dirección de L va de v a v’, y se
toma un vértice r como la raíz donde inicia el grafo.

Árbol ordenado: es un conjunto finito de uno o más vértices tales que hay un vértice
designado r, llamado la raíz, y tal que los vértices restantes, son divididos en n > 0
subconjuntos mutuamente exclusivos, cada uno de los cuales son a la vez árboles
ordenados.

Árbol binario: Es un conjunto finito de vértices que están vacíos o consiste en un vértice
llamado raíz y dos subárboles binarios, los cuales son disjuntos uno del otro, y son
llamados subárboles izquierdo y derecho

Árbol binario lleno: Es un árbol binario en el cual cada nodo o es hoja o tiene
exactamente dos descendientes no vacíos.

Árbol binario completo: es un árbol binario con hojas en los dos últimos niveles y en las
hojas del último nivel están a la izquierda

3.1 Terminología
Para fines del resto de la unidad, adoptaremos la terminología de árboles que se ilustra en
la Figura 2.

Figura 2: Terminología de árboles

Raíz: El nodo en el inicio del árbol, desde el cual se inician todos los caminos

Lado: el enlace entre dos nodos

Nivel: Cada paso desde la raíz hasta el fondo, es llamado un nivel. La raíz está en el
nivel 1 y se incrementa en cada nivel.

Padre: El predecesor de cada nodo es llamado el nodo padre. Otra forma de decirlo, es
que un padre es el nodo que tiene hijos

Hijo: Es cualquier nodo que desciende de otro nodo (nodo padre). Cualquier otro nodo
que no sea la raíz
Hermanos: Nodos que son hijos de un mismo padre

Subárbol: Un subconjunto de nodos compuesto de un nodo determinado y todos sus


descendientes.

Nodo interno: Nodo que tiene al menos un hijo.

Nodo hoja: Nodo que no tiene hijos. También es llamado nodo terminal.

Grado: Cantidad de hijos que tiene un nodo

Ruta: Es la secuencia de nodos y lados entre un nodo y otro. La longitud de la ruta es


el número total nodos en la ruta. En la gráfica anterior la longitud es 3.

Altura: Es la longitud de la ruta más larga, entre la raíz y cualquier nodo hoja.

4 Representaciones de árboles en memoria


Los árboles binarios son construidos típicamente con una estructura de nodos y apuntadores
en la cual se almacenan datos, tal como se
muestra en la Figura 3, donde cada nodo
tiene una referencia o apuntador a un nodo
izquierdo y a un nodo derecho denominados
hijos. En ocasiones, también contiene un
apuntador al padre. 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.
Figura 3: Representación dinámica Los árboles binarios también pueden
ser almacenados como una estructura de
datos implícita en arreglos lexicográficos,
tal como se muestra en la Figura 4. Si el árbol es un árbol binario completo, normalmente lleno
o casi lleno y se conoce el número máximo de elementos, este método no desaprovecha el
espacio en memoria. Tomaremos como notación la siguiente: si un nodo tiene un índice i, su hijo
izquierdo se encuentra en el índice 2i + 1 y su hijo derecho está en el índice 2i + 2, mientras
que sus padres (si los tiene) se encuentra
i−1
en el índice ⌊ 2 ⌋ (partiendo de que la raiz
tenga índice cero). Este método tiene
como ventajas el tener almacenados los
datos de forma más compacta y por tener
una forma más rápida y eficiente de Figura 4: Representación estática
localizar los datos en particular durante un
preorden transversal. Sin embargo, si el árbol no está completo, desperdicia mucho espacio en
memoria.
4.1 Codificación de árboles n-arios como árboles binarios
Cuando queremos representar un árbol binario en memoria dinámica, cada nodo deberá
tener dos apuntadores, en el caso de un árbol ternario deberán ser tres apuntadores, y así
sucesivamente hasta la representación de un árbol k-ario que deberá tener k apuntadores a sus
hijos.
Sin embargo, esta representación resulta deficiente si:

• La mayoría de los nodos tienen un número de hijos mucho menor que k o


• No existe un límite en la cantidad de hijos
que pueda tener un nodo

En estos casos es útil la representación


primer hijo/siguiente hermano, o un árbol
doblemente encadenado que consiste en que
cada nodo tiene un apuntador a la lista de sus
hijos y un apuntador a su siguiente hermano
(hijo del mismo padre).

Por ejemplo, en el árbol de la izquierda, la A


tiene 6 hijos (B, C, D, E, F, G). Puede ser Figura 5: Representación primer hijo/siguiente hermano
convertido en el árbol binario de la derecha.

5 Recorridos
1. Preorden
2. En orden
3. Postorden
4. Por niveles
5. Circuito de Euler
6. Circuito externo

Cada recorrido genera una secuencia de llaves, que determina una relación de sucesor y
predecesor en cada recorrido
Ejemplo: en el siguiente árbol
Tiene las siguientes secuencias:

• Secuencia preorden: 8, 7, 2, 6, 5, 11, 1, 9, 4


• Secuencia en orden: 2, 7, 5, 6, 11, 8, 1, 4, 9
• Secuencia postorden: 2, 5, 11, 6, 7, 4, 9, 1, 8
• Secuencia por niveles: 8, 7, 1, 2, 6, 9, 5, 11, 4

Así hablamos de relaciones sucesor-predecesor, según las secuencias. Ejemplo: 5 es predecesor


en preorden del 11, predecesor en orden del 6, sucesor en postorden del 2.

También podría gustarte