¿Qué es un Árbol?
Un árbol es una estructura de datos jerárquica que consiste en nodos conectados por aristas. Es una de las estructuras de datos más importantes y versátiles en la informática. Los árboles se utilizan en una variedad de aplicaciones, desde la representación de jerarquías hasta la optimización de búsquedas.
Características de un Árbol
- Nodo Raíz: El nodo superior del árbol. Solo hay uno y no tiene padres.
- Nodos Hijo: Nodos que descienden de otro nodo.
- Nodos Padre: Nodos que tienen uno o más nodos hijos.
- Hojas: Nodos que no tienen hijos.
- Altura del Árbol: La longitud del camino más largo desde la raíz hasta una hoja.
- Profundidad de un Nodo: La longitud del camino desde la raíz hasta ese nodo.
- Subárbol: Un árbol formado por un nodo y todos sus descendientes.
Terminología Básica
| Término | Descripción |
|---|---|
| Raíz | El nodo superior del árbol. |
| Hijo | Un nodo que desciende de otro nodo. |
| Padre | Un nodo que tiene uno o más nodos hijos. |
| Hoja | Un nodo que no tiene hijos. |
| Altura | La longitud del camino más largo desde la raíz hasta una hoja. |
| Profundidad | La longitud del camino desde la raíz hasta un nodo específico. |
| Subárbol | Un árbol formado por un nodo y todos sus descendientes. |
Ejemplo de un Árbol
Consideremos el siguiente árbol:
- Raíz: A
- Hijos de A: B, C
- Padre de B y C: A
- Hojas: D, E, F
- Altura del Árbol: 2 (camino más largo A -> B -> D)
- Profundidad de D: 2 (camino A -> B -> D)
Tipos de Árboles
- Árbol Binario: Cada nodo tiene como máximo dos hijos.
- Árbol Binario de Búsqueda (BST): Un árbol binario en el que para cada nodo, todos los nodos en el subárbol izquierdo tienen valores menores y todos los nodos en el subárbol derecho tienen valores mayores.
- Árbol AVL: Un árbol binario de búsqueda auto-balanceado.
- Árbol B: Un árbol auto-balanceado en el que cada nodo puede tener más de dos hijos.
Implementación Básica de un Árbol en Python
A continuación, se muestra una implementación básica de un árbol binario en Python:
class Nodo:
def __init__(self, valor):
self.valor = valor
self.izquierda = None
self.derecha = None
class ArbolBinario:
def __init__(self):
self.raiz = None
def agregar(self, valor):
if self.raiz is None:
self.raiz = Nodo(valor)
else:
self._agregar(valor, self.raiz)
def _agregar(self, valor, nodo_actual):
if valor < nodo_actual.valor:
if nodo_actual.izquierda is None:
nodo_actual.izquierda = Nodo(valor)
else:
self._agregar(valor, nodo_actual.izquierda)
else:
if nodo_actual.derecha is None:
nodo_actual.derecha = Nodo(valor)
else:
self._agregar(valor, nodo_actual.derecha)
def imprimir_en_orden(self):
if self.raiz is not None:
self._imprimir_en_orden(self.raiz)
def _imprimir_en_orden(self, nodo_actual):
if nodo_actual is not None:
self._imprimir_en_orden(nodo_actual.izquierda)
print(nodo_actual.valor)
self._imprimir_en_orden(nodo_actual.derecha)
# Ejemplo de uso
arbol = ArbolBinario()
arbol.agregar(10)
arbol.agregar(5)
arbol.agregar(15)
arbol.agregar(2)
arbol.agregar(7)
arbol.imprimir_en_orden()Explicación del Código
- Clase Nodo: Representa un nodo en el árbol. Cada nodo tiene un valor y dos hijos (izquierda y derecha).
- Clase ArbolBinario: Representa el árbol binario. Tiene métodos para agregar nodos y para imprimir el árbol en orden.
- Método agregar: Agrega un nuevo nodo al árbol. Si el árbol está vacío, el nuevo nodo se convierte en la raíz. De lo contrario, se llama a un método auxiliar
_agregarpara encontrar la posición correcta. - Método imprimir_en_orden: Imprime los valores del árbol en orden ascendente.
Conclusión
En esta sección, hemos introducido los conceptos básicos de los árboles, incluyendo su terminología y características. También hemos visto una implementación básica de un árbol binario en Python. En las siguientes secciones, profundizaremos en tipos específicos de árboles y sus aplicaciones.
En el siguiente módulo, exploraremos los Árboles Binarios, donde aprenderemos sobre sus propiedades, operaciones y aplicaciones específicas.
Curso de Estructuras de Datos
Módulo 1: Introducción a las Estructuras de Datos
- ¿Qué son las Estructuras de Datos?
- Importancia de las Estructuras de Datos en la Programación
- Tipos de Estructuras de Datos
Módulo 2: Listas
- Introducción a las Listas
- Listas Enlazadas
- Listas Doblemente Enlazadas
- Listas Circulares
- Ejercicios con Listas
Módulo 3: Pilas
- Introducción a las Pilas
- Operaciones Básicas con Pilas
- Implementación de Pilas
- Aplicaciones de las Pilas
- Ejercicios con Pilas
Módulo 4: Colas
- Introducción a las Colas
- Operaciones Básicas con Colas
- Colas Circulares
- Colas de Prioridad
- Ejercicios con Colas
Módulo 5: Árboles
- Introducción a los Árboles
- Árboles Binarios
- Árboles Binarios de Búsqueda
- Árboles AVL
- Árboles B
- Ejercicios con Árboles
Módulo 6: Grafos
- Introducción a los Grafos
- Representación de Grafos
- Algoritmos de Búsqueda en Grafos
- Algoritmos de Caminos Mínimos
- Aplicaciones de los Grafos
- Ejercicios con Grafos
