Árboles binarios de búsqueda
Un árbol binario de búsqueda equilibrado de 1023 claves encuentra cualquiera de ellas en 10 comparaciones como máximo; construido a partir de datos ordenados, las mismas claves pueden llevar 1023.
La búsqueda binaria, incorporada a la forma
La búsqueda binaria en un arreglo ordenado encuentra una clave en unas log₂ n comprobaciones, pero insertar en un arreglo ordenado mueve valores. Una tabla hash inserta rápido, pero olvida el orden: no puede decirte con facilidad cuál es la clave más pequeña ni cuál es la siguiente después de 40. Un árbol binario de búsqueda (ABB, o BST en inglés) busca las dos cosas. Está hecho de nodos, como una lista enlazada, pero cada nodo tiene dos punteros, left y right. El nodo de arriba es la raíz; un nodo sin hijos es una hoja.
Una sola regla lo convierte en un árbol de búsqueda: en cada nodo, todas las claves de su subárbol izquierdo son menores y todas las de su subárbol derecho son mayores. Para buscar una clave, empieza en la raíz y compara. Si es igual, la encontraste. Si es menor, ve a la izquierda; si es mayor, a la derecha. Cada comparación descarta un subárbol entero, igual que la búsqueda binaria descarta la mitad de la lista. Buscar 60 en el árbol 50, 30, 70, 20, 40, 60, 80 compara con 50, luego con 70 y luego con 60: 3 comparaciones.
Insertar sigue el mismo camino. Ve a la izquierda o a la derecha hasta que el puntero que necesitas esté vacío, y cuelga ahí el nodo nuevo. Insertar 45 compara con 50 (a la izquierda), 30 (a la derecha) y 40 (a la derecha), y 40 no tiene hijo derecho, así que 45 pasa a serlo. Eliminar un nodo que no es hoja requiere una idea más: las notas del MIT intercambian su elemento con la clave siguiente o anterior en orden y eliminan desde ahí. La regla de conteo del laboratorio es una comparación por cada nodo del camino.
Arrastra para girar. Desplaza o pellizca para acercar.
La altura lo es todo
¿Cuántas comparaciones puede llevar una búsqueda? Como máximo una por nivel, así que el costo depende de la altura del árbol, el número de aristas del camino más largo desde la raíz hasta una hoja. Las notas del MIT lo dicen así: las operaciones del árbol se ejecutan en tiempo O(h). El árbol 50, 30, 70, 20, 40, 60, 80 tiene altura 2, así que ninguna búsqueda necesita más de 3 comparaciones. Un árbol perfectamente equilibrado con 1023 nodos tiene altura 9 y necesita 10 como máximo.
Pero la forma depende del orden de inserción. Inserta 10, 20, 30, 40, 50, 60, 70 en orden y cada clave es mayor que todas las anteriores, así que cada nodo nuevo va a la derecha del último. El árbol se convierte en una cadena de altura 6, y buscar 70 lleva 7 comparaciones: una lista enlazada con punteros de más. Con 1023 claves ordenadas, la peor búsqueda lleva 1023 comparaciones en lugar de 10.
Los árboles equilibrados lo resuelven reorganizándose después de cada inserción o eliminación. El primer esquema fue el árbol AVL, de Georgy Adelson-Velsky y Evgenii Landis en 1962, que trata la clase 7 del MIT. En cada nodo mantiene las alturas de los dos subárboles con una diferencia de 1 como máximo, y repara cualquier desequilibrio con pequeños movimientos locales llamados rotaciones. Así la altura se mantiene en O(log n), y buscar, insertar y eliminar siguen siendo O(log n) sea cual sea el orden en que lleguen las claves.
Las claves en orden, sin costo extra
Un ABB guarda algo más que la pertenencia. Visita el subárbol izquierdo, luego el nodo y luego el subárbol derecho, de forma recursiva, y las claves salen ordenadas. Este recorrido en orden (in-order; el MIT lo llama orden de recorrido) es la forma en que un ABB responde "clave más pequeña", "clave más grande" y "siguiente clave después de 40", las operaciones de orden de la interfaz Set del MIT que una tabla hash no puede hacer rápido.
| Raíz y hoja | La raíz es el nodo de arriba; una hoja no tiene hijos. |
| Propiedad del ABB | En cada nodo, las claves del subárbol izquierdo son menores y las del subárbol derecho, mayores. |
| Altura | Aristas del camino más largo de la raíz a una hoja. Una búsqueda lleva como máximo altura + 1 comparaciones. |
| Árbol AVL | Un ABB equilibrado (1962): las alturas de los subárboles difieren en 1 como máximo, y se corrigen con rotaciones. |
| Recorrido en orden | Izquierda, nodo, derecha: enumera las claves ordenadas. |
- ¿Qué enunciado es la propiedad del árbol binario de búsqueda?
- Cada nodo tiene exactamente dos hijos
- En cada nodo, las claves del subárbol izquierdo son menores y las del derecho, mayores
- Las claves se guardan en el orden de inserción
- La raíz es la clave más pequeña
- Árbol construido con 50, 30, 70, 20, 40, 60, 80. ¿Cuántas comparaciones lleva buscar 60?
- El mismo árbol: buscar 45, que no está, ¿cuántas comparaciones lleva?
- Inserta 45 en ese árbol. ¿Dónde queda?
- Hijo izquierdo de 50
- Hijo derecho de 40
- Hijo izquierdo de 60
- Hijo derecho de 30
- ¿Cuál es la altura del árbol 50, 30, 70, 20, 40, 60, 80?
- Inserta 10, 20, 30, 40, 50, 60, 70 en ese orden. ¿Cuántas comparaciones lleva buscar 70?
- Un ABB perfectamente equilibrado tiene 1023 nodos (altura 9). ¿Cuál es el máximo de comparaciones que puede llevar una búsqueda?
- Ordena las claves del árbol 50, 30, 70, 20, 40 en el orden en que las visita un recorrido en orden.
- ¿Quién propuso el primer esquema de árbol equilibrado, y cuándo?
- Adelson-Velsky y Landis, 1962
- Luhn, 1953
- Bauer y Samelson, 1957
- Knuth, 1998
- ¿Qué pregunta puede responder rápido un ABB pero no una tabla hash simple?
- ¿Está guardado 40?
- ¿Cuál es la clave siguiente después de 40?
- ¿Cuántas cubetas hay?
- ¿Cuánto es 40 mod 7?
- En un ABB, en cada nodo las claves menores van a la izquierda y las mayores a la derecha.
- Buscar e insertar siguen un solo camino: como máximo altura + 1 comparaciones.
- Los datos ordenados forman una cadena (7 claves, altura 6); los árboles equilibrados como el AVL (1962) mantienen la altura en O(log n).
- Un recorrido en orden enumera las claves de menor a mayor.
Fuentes de este curso (11)
- MIT OpenCourseWare 6.006 Introduction to Algorithms, Spring 2020 (Demaine, Ku, Solomon)
- lecture notes 2 Data Structures (interface vs data structure, Sequence and Set interfaces, stack = insert_last/delete_last, queue = insert_last/delete_first, array, linked list, dynamic array, amortized Θ(1) append)
- 4 Hashing (chaining, pigeonhole collisions, chain length n/m)
- 6 Binary Trees Part 1 (height, traversal order, O(h) operations) and 7 Binary Trees Part 2: AVL (Adelson-Velsky and Landis, 1962) at ocw.mit.edu/courses/6-006-introduction-to-algorithms-spring-2020/pages/lecture-notes
- MDN Web Docs, Array.prototype.shift (shifts all values left by 1)
- Array.prototype.unshift, Map (insertion order, Map vs Object, spec requires sublinear average access) and Set (developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects)
- ECMAScript 2025 Language Specification (tc39.es/ecma262)
- 24.1 Map Objects and 24.2 Set Objects ("must be implemented using either hash tables or other mechanisms that, on average, provide access times that are sublinear on the number of elements")
- Array.prototype.shift steps (Repeat, while k < len: move element k to k - 1)
- D. E. Knuth, The Art of Computer Programming vol. 3 (2nd ed. 1998) section 6.4 History (H. P. Luhn, IBM internal memorandum January 1953, hashing with chaining; digit pairs added mod 10, 31415926 -> 4548) via gwern.net copy, and IEEE Spectrum, "Hans Peter Luhn and the Birth of the Hashing Algorithm" (2018)
- "A brief history of the stack", SIGCIS (sigcis.org/files/A brief history.pdf: Bauer and Samelson applied for the patent in 1957, US 3,047,228 granted July 31, 1962; IPL list processing by Newell, Simon and Shaw at RAND 1956) and Wikipedia, Information Processing Language (Newell, Shaw, Simon, RAND and Carnegie Institute of Technology, about 1956).
Fecha de consulta: 2026-10-18