Árbol binario de búsqueda en Python
Un árbol binario de búsqueda guarda los valores menores en el subárbol izquierdo y los mayores en el derecho, así que cada comparación descarta la mitad del árbol restante.
¿Qué es Árbol binario de búsqueda en Python?
Un árbol binario de búsqueda guarda los valores menores en el subárbol izquierdo y los mayores en el derecho, así que cada comparación descarta la mitad del árbol restante.
Construye un árbol binario de búsqueda en Python: inserta valores, búscalos y lístalos en orden.
¿Cuándo se utiliza?
- Comprender algoritmos y estructuras de datos.
- Observar cada paso y tratar casos límite.
- Comparar tiempo de ejecución y memoria.
Mira cómo funciona
Inserta valores para ver dónde quedan, busca un valor para seguir su camino y ejecuta un recorrido para ver el orden de visita.
Código de ejemplo
class Node:
def __init__(self, value):
self.value = value
self.left = None # smaller values go left
self.right = None # larger values go right
def insert(node, value):
if node is None:
return Node(value)
if value < node.value:
node.left = insert(node.left, value)
elif value > node.value:
node.right = insert(node.right, value)
return node
def contains(node, value):
# Each comparison discards one whole subtree.
while node is not None:
if value == node.value:
return True
node = node.left if value < node.value else node.right
return False
def inorder(node):
# Left subtree, node, right subtree: visits values in sorted order.
if node is None:
return []
return inorder(node.left) + [node.value] + inorder(node.right)
def height(node):
if node is None:
return 0
return 1 + max(height(node.left), height(node.right))
root = None
for value in [50, 30, 70, 20, 40, 60, 80]:
root = insert(root, value)
print("inorder:", inorder(root))
print("contains 60:", contains(root, 60))
print("contains 65:", contains(root, 65))
print("height:", height(root))
Resultado esperado
inorder: [20, 30, 40, 50, 60, 70, 80]
contains 60: True
contains 65: False
height: 3
Cómo funciona
insert() baja desde la raíz y coloca el valor en su sitio. contains() sigue un único camino, que en un árbol equilibrado toma O(log n) pasos. Un recorrido inorder visita izquierda, nodo, derecha, así que los valores salen ordenados.
Cambia los valores y ejecuta el programa en el compilador Python online de CodeUtility sin instalar Python.
Ejercicios prácticos
Modifica las entradas y prueba casos límite antes de usar conjuntos de datos mayores.
- Prueba una entrada vacía, un elemento y duplicados.
- Muestra el estado después de cada paso.
- Compara el rendimiento con otra solución.
Practica con un reto
Usa lo que cubre esta lección para resolver un problema real. Cada reto se ejecuta en el navegador, con pruebas al instante y una revisión de IA.
- Diámetro de un Árbol Un árbol es un grafo no dirigido, conexo y sin ciclos. Intermedio
- Tamaños de carpetas con Composite Calcula el tamaño total de cada carpeta en un árbol donde las carpetas contienen archivos y otras carpetas. Intermedio