2. Los árboles son estructuras de datos fundamentales en informática
que modelan relaciones jerárquicas entre elementos. Esta estructura
no lineal se compone de nodos interconectados mediante enlaces,
donde un nodo principal llamado "raíz" da origen a subárboles, y cada
nodo puede tener cero o más nodos hijos.
Definición de la estructura de árbol
La estructura de árbol es una estructura de datos jerárquica y no lineal
que consta de nodos conectados entre sí mediante enlaces o aristas.
Se compone de un nodo raíz, que es el nodo principal desde el cual se
derivan todos los demás nodos, y cada nodo puede tener cero o más
nodos hijos, dependiendo de su grado.
Cada nodo, excepto el nodo raíz, está conectado por exactamente un
enlace a otro nodo superior llamado nodo padre. Los nodos sin hijos
se denominan hojas. La estructura de árbol se utiliza ampliamente en
informática para organizar y gestionar datos de manera eficiente,
permitiendo operaciones de inserción, eliminación, búsqueda y
recorrido de los elementos almacenados en ella.
Árbol Binario: Un árbol binario es una estructura de árbol en la
que cada nodo tiene como máximo dos nodos hijos, generalmente
denominados hijo izquierdo e hijo derecho. Los árboles binarios
pueden ser de varios tipos, como árboles binarios de búsqueda,
árboles AVL, árboles rojo-negro, entre otros.
Ejemplo de un árbol binario:
10
/
5 15
/ /
3 8 12 18
3. Recorrido del árbol binario y Operaciones con árbol
binario:
Los árboles binarios son una estructura de datos versátil y poderosa
que se utiliza ampliamente en ciencias de la computación. Los
recorridos de árboles binarios y las operaciones asociadas son
esenciales para manipular y gestionar eficientemente los datos
almacenados en ellos.
Recorridos de Árbol Binario:
1. Inorden (Izquierda - Raíz - Derecha): En este recorrido, primero
se visita el subárbol izquierdo, luego la raíz y finalmente el
subárbol derecho.
2. Preorden (Raíz - Izquierda - Derecha): En este recorrido, primero
se visita la raíz, luego el subárbol izquierdo y finalmente el
subárbol derecho.
3. Postorden (Izquierda - Derecha - Raíz): En este recorrido,
primero se visita el subárbol izquierdo, luego el subárbol derecho
y finalmente la raíz.
Estos recorridos permiten acceder a todos los nodos del árbol de
manera ordenada, lo que resulta útil para realizar diversas
operaciones como búsqueda, inserción, eliminación y ordenamiento.
Búsqueda de un Elemento dentro de una Estructura de
Árbol:
La búsqueda de un elemento dentro de un árbol binario implica
recorrer el árbol de manera adecuada para encontrar el nodo que
contiene el valor deseado. Dependiendo del ordenamiento del árbol,
es posible optimizar la búsqueda para encontrar el elemento de
manera eficiente.
4. Ordenamiento:
Los árboles binarios pueden utilizarse para ordenar un conjunto de
elementos de manera eficiente. Insertando elementos en un árbol
binario de búsqueda y recorriéndolos en orden específico, es posible
obtener una secuencia ordenada de los elementos almacenados en el
árbol.
Programa de Ejemplo en Python para Utilizar Árboles
Binarios
A continuación, se muestra un ejemplo de un programa en Python que
implementa un árbol binario de búsqueda y realiza operaciones como
inserción, búsqueda y recorridos.
class Nodo:
def __init__(self, valor):
self.valor = valor
self.izquierda = None
self.derecha = None
class ArbolBinarioBusqueda:
def __init__(self):
self.raiz = None
def insertar(self, valor):
5. if self.raiz is None:
self.raiz = Nodo(valor)
else:
self._insertar_recursivo(self.raiz, valor)
def _insertar_recursivo(self, nodo, valor):
if valor < nodo.valor:
if nodo.izquierda is None:
nodo.izquierda = Nodo(valor)
else:
self._insertar_recursivo(nodo.izquierda, valor)
elif valor > nodo.valor:
if nodo.derecha is None:
nodo.derecha = Nodo(valor)
else:
self._insertar_recursivo(nodo.derecha, valor)
def buscar(self, valor):
return self._buscar_recursivo(self.raiz, valor)
def _buscar_recursivo(self, nodo, valor):
6. if nodo is None or nodo.valor == valor:
return nodo
if valor < nodo.valor:
return self._buscar_recursivo(nodo.izquierda, valor)
return self._buscar_recursivo(nodo.derecha, valor)
def inorden(self):
return self._inorden_recursivo(self.raiz)
def _inorden_recursivo(self, nodo):
if nodo is not None:
self._inorden_recursivo(nodo.izquierda)
print(nodo.valor)
self._inorden_recursivo(nodo.derecha)
# Uso del programa
arbol = ArbolBinarioBusqueda()
arbol.insertar(10)
arbol.insertar(5)
arbol.insertar(15)
arbol.insertar(3)
7. arbol.insertar(8)
print("Recorrido Inorden:")
arbol.inorden()
print("nBúsqueda de elemento:")
resultado = arbol.buscar(5)
if resultado:
print("El elemento 5 está en el árbol.")
else:
print("El elemento 5 no está en el árbol.")
Dicho programa crea un árbol binario de búsqueda, también
inserta algunos valores, realiza una búsqueda y muestra el
recorrido en inorden de los nodos del árbol.