¿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

  1. Nodo Raíz: El nodo superior del árbol. Solo hay uno y no tiene padres.
  2. Nodos Hijo: Nodos que descienden de otro nodo.
  3. Nodos Padre: Nodos que tienen uno o más nodos hijos.
  4. Hojas: Nodos que no tienen hijos.
  5. Altura del Árbol: La longitud del camino más largo desde la raíz hasta una hoja.
  6. Profundidad de un Nodo: La longitud del camino desde la raíz hasta ese nodo.
  7. 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:

        A
       / \
      B   C
     / \   \
    D   E   F
  • 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

  1. Árbol Binario: Cada nodo tiene como máximo dos hijos.
  2. Á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.
  3. Árbol AVL: Un árbol binario de búsqueda auto-balanceado.
  4. Á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

  1. Clase Nodo: Representa un nodo en el árbol. Cada nodo tiene un valor y dos hijos (izquierda y derecha).
  2. Clase ArbolBinario: Representa el árbol binario. Tiene métodos para agregar nodos y para imprimir el árbol en orden.
  3. 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.
  4. 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.

© Copyright 2024. Todos los derechos reservados