¿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
_agregar
para 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