Continuamos hoy con nuestra serie de artículos acerca de los principales algoritmos existentes para la ordenación de elementos de una lista y su implementación usando el lenguaje Python. En la presente ocasión hablaremos de la ordenación por ‘Arbol Binario de Busqueda‘ (‘BST‘ por sus siglas en inglés), donde combinaremos la estructura de árbol binario con la propiedad de búsqueda de datos, ofreciendo un enfoque efectivo para organizar y recuperar información. Tras ello, mostraremos un sencillo ejemplo de implementación en Python.
QUE ES UN ARBOL BINARIO DE BUSQUEDA:
Un Árbol Binario de Búsqueda (‘BST‘ en adelante) es una estructura de datos jerárquica en la que cada nodo tiene, a lo sumo, dos nodos secundarios: Un nodo izquierdo, cuyo valor es menor y un nodo derecho, cuyo valor es superior al nodo principal. Siendo este principio de organización el que facilita la búsqueda y ordenación de datos de manera eficiente:

Para ordenar elementos en un árbol binario de búsqueda, se siguen reglas simples. Al insertar un nuevo elemento, se compara con el nodo actual. Si es menor, se inserta a la izquierda; si es mayor, a la derecha. Este proceso se repite recursivamente hasta encontrar un nodo sin hijo en la dirección adecuada, donde se inserta el nuevo elemento.
IMPLEMENTACIÓN EN PYTHON:
A continuación pasaremos a ver un sencillo ejemplo de implementación de este algoritmo, en Python, en la que empezaremos definiendo una clase (a la que llamaremos ‘Nodo‘), la cual, representará un nodo en nuestro ‘BST‘, en donde cada nodo tendrá un valor, así como referencias a sus respectivos nodos secundarios izquierdo (‘self.izquierdo‘) y derecho (‘self.derecho‘), que inicialmente no tendrán ninguno:

A continuación, definiremos la función ‘insertar()‘ que se encargará de insertar un nuevo nodo al árbol. De modo que si la variable ‘raiz‘ es ‘None‘, significará que estamos insertando el primer nodo, creándose un nuevo nodo con el valor proporcionado. Por su parte, si la raíz ya existe, se comparará el valor a insertar con el valor de la raíz. Así, dependiendo de si es menor o mayor, se llamará recursivamente a la función ‘insertar()‘ en el subárbol izquierdo o derecho, devolviéndose finalmente la raíz actualizada del árbol:

Por último, definiremos la función ‘inorden()‘, la cual, realiza un recorrido por los elementos del árbol. Recorriendo primero el subárbol izquierdo, luego la raíz y finalmente el subárbol derecho. En este caso, se utiliza para imprimir los elementos del árbol en orden ascendente:

Una vez definida la clase y sendas funciones, definiremos la lista de elementos a ordenar, la cual iremos recorriendo, utilizando la función ‘insertar()‘ para ir incluyéndolos en el árbol, para, finalmente, proceder a su ordenación mediante el la función ‘inorden()‘:

OUTPUT:

CONCLUSIÓNES:
Las ventajas de utilizar un árbol binario de búsqueda (‘BST‘) radican en su eficiencia y simplicidad conceptual. Permite la rápida búsqueda y ordenación de elementos, con operaciones como inserción y eliminación. Además, la estructura jerárquica facilita la comprensión y manipulación de datos ordenados. Además, se puede adaptar para aplicaciones específicas, como árboles ‘AVL‘ o árboles ‘rojo-negro‘, para mantener un equilibrio y mejorar aún más la eficiencia.
No obstante, existen desventajas importantes. La eficiencia está sujeta a la estructura del árbol, y si este degenera en una lista enlazada, las operaciones pueden volverse lineales, perdiendo la ventaja logarítmica. Además, la complejidad en la gestión de memoria y la necesidad de mantener la propiedad de búsqueda pueden complicar la implementación. Además, en comparación con otras estructuras de datos, como las tablas hash, la búsqueda puede volverse menos eficiente en ciertos casos.
En resumen, aunque los árboles binarios de búsqueda ofrecen una solución eficaz para ciertos escenarios, su rendimiento óptimo depende de la gestión de su estructura y su implementación precisa.
Saludos.





































































