Menu
Coddy logo textTech

Árbol binario de búsqueda (BST)

Última actualización

Un árbol binario de búsqueda mantiene sus valores ordenados: para cada nodo, todos los valores de su subárbol izquierdo son menores y todos los de su subárbol derecho son mayores. Para insertar o encontrar un valor comienzas en la raíz y avanzas repetidamente a la izquierda o a la derecha según la comparación, de modo que cada paso divide a la mitad el espacio de búsqueda. Pulsa reproducir arriba para ver los valores colocados por comparación y una búsqueda que baja por el árbol.

En un árbol equilibrado estas operaciones se ejecutan en tiempo O(log n). El problema: insertar datos ya ordenados hace que el árbol degenere en una lista enlazada con operaciones O(n), que es exactamente por lo que existen variantes autoequilibradas como los árboles AVL y rojo-negro.

Complejidad temporal y espacial

OperaciónEquilibradoPeor caso (desbalanceado)
BúsquedaO(log n)O(n)
InserciónO(log n)O(n)
EliminaciónO(log n)O(n)
EspacioO(n)O(n)

Paso a paso (inserción)

PasoQué ocurre
1Si el árbol está vacío, el nuevo valor se convierte en la raíz.
2En caso contrario, empieza en la raíz.
3Si el valor es menor, ve al hijo izquierdo; si es mayor, ve a la derecha.
4Repite hasta llegar a un lugar vacío.
5Coloca allí el nuevo valor como hoja.

Ejemplo resuelto

Insertando [5, 3, 8, 1, 4] en un árbol vacío, un valor a la vez:

InsertarCamino recorridoAcción
5-El árbol está vacío, así que 5 se convierte en la raíz.
353 < 5, ve a la izquierda; el lugar está vacío, coloca 3 como hijo izquierdo de 5.
858 > 5, ve a la derecha; el lugar está vacío, coloca 8 como hijo derecho de 5.
15 -> 31 < 5 ve a la izquierda, luego 1 < 3 ve a la izquierda; coloca 1 como hijo izquierdo de 3.
45 -> 34 < 5 ve a la izquierda, luego 4 > 3 ve a la derecha; coloca 4 como hijo derecho de 3.

Cuándo usar un árbol binario de búsqueda

Úsalo cuandoEvítalo cuando
Necesitas orden más búsquedas rápidas y las inserciones llegan en orden aleatorio.Tus datos llegan ya ordenados: un BST desbalanceado degrada a O(n) por operación.
Quieres que el recorrido en orden devuelva los valores en secuencia ordenada de forma gratuita.Solo necesitas pruebas de pertenencia sin orden: una tabla hash ofrece búsquedas O(1) en promedio.
Necesitas consultas por rango o el sucesor/predecesor de una clave.Necesitas garantías O(log n): recurre a un árbol autoequilibrado AVL o rojo-negro.
El conjunto de datos cambia con frecuencia y actualizar un arreglo ordenado sería costoso.El conjunto de datos es fijo y de solo lectura: un arreglo ordenado con búsqueda binaria es más simple y aprovecha mejor la caché.

Código de Binary Search Tree

Una implementación limpia y ejecutable de Binary Search Tree en Python, JavaScript, Java, C++, C. Elige un lenguaje, copia el código o ábrelo ya cargado en el Playground de Coddy.

Código de Binary Search Tree en Python

Python
1class Node:2    def __init__(self, key):3        self.key = key4        self.left = None5        self.right = None6
7
8def insert(node, key):9    if node is None:10        return Node(key)11    if key < node.key:12        node.left = insert(node.left, key)13    elif key > node.key:14        node.right = insert(node.right, key)15    return node  # duplicates are ignored16
17
18def search(node, key):19    if node is None:20        return False21    if key == node.key:22        return True23    if key < node.key:24        return search(node.left, key)25    return search(node.right, key)26
27
28def inorder(node):29    if node is None:30        return []31    return inorder(node.left) + [node.key] + inorder(node.right)32
33
34root = None35for key in [8, 3, 10, 1, 6, 14, 4, 7]:36    root = insert(root, key)37
38print("Inorder (sorted):", inorder(root))39print("search(6): ", search(root, 6))40print("search(5): ", search(root, 5))
Ejecuta este código en el Playground de Python

Preguntas frecuentes sobre el árbol binario de búsqueda

¿Cuál es la complejidad temporal de un árbol binario de búsqueda?
La búsqueda, la inserción y la eliminación son O(log n) en un árbol equilibrado, porque cada comparación descarta la mitad de los nodos restantes. En el peor caso, un árbol desbalanceado en forma de cadena por inserciones ordenadas, degradan a O(n).
¿Cuál es la diferencia entre un árbol binario y un árbol binario de búsqueda?
Un árbol binario es cualquier árbol donde cada nodo tiene como máximo dos hijos, sin regla de orden. Un árbol binario de búsqueda añade la invariante de que los valores del subárbol izquierdo son menores y los del derecho son mayores que el nodo, que es lo que permite búsquedas rápidas.
¿Por qué un árbol binario de búsqueda puede volverse lento?
Si los valores se insertan en orden ordenado (o inverso), cada nuevo nodo va al mismo lado, produciendo un árbol alto y desbalanceado que se comporta como una lista enlazada: O(n) por operación. Los árboles autoequilibrados (AVL, rojo-negro) rotan nodos para evitarlo.
¿Cuál es la diferencia entre un árbol binario de búsqueda y una tabla hash?
Una tabla hash ofrece búsquedas O(1) en promedio pero almacena las claves sin ningún orden, por lo que no puede responder consultas por rango o de sucesor. Un árbol binario de búsqueda es algo más lento con O(log n) pero mantiene las claves ordenadas, lo que permite recorrerlas en orden y encontrar valores cercanos. Elige un BST cuando el orden importa y una tabla hash cuando solo necesitas pruebas de pertenencia.
¿Cuándo debería usar un árbol autoequilibrado en lugar de un BST simple?
Usa un árbol autoequilibrado (AVL, rojo-negro) siempre que no puedas controlar el orden de inserción y necesites un rendimiento O(log n) garantizado. Un BST simple está bien para enseñar, para conjuntos pequeños o cuando las claves llegan en orden aleatorio, pero no protege contra el peor caso desbalanceado.
¿Un recorrido en orden de un BST devuelve valores ordenados?
Sí. Visitar el subárbol izquierdo, luego el nodo y después el subárbol derecho produce las claves en orden ascendente, lo que se sigue directamente de la invariante del BST. Un error común es esperar lo mismo de un árbol binario simple: sin la regla de orden, el recorrido en orden no produce ninguna secuencia significativa.
Coddy programming languages illustration

Domina los algoritmos con Coddy

COMENZAR