Albero binario di ricerca in Python
Un albero binario di ricerca tiene i valori più piccoli nel sottoalbero sinistro e quelli più grandi nel destro, quindi ogni confronto esclude metà dell'albero rimasto.
Che cos’è Albero binario di ricerca?
Un albero binario di ricerca tiene i valori più piccoli nel sottoalbero sinistro e quelli più grandi nel destro, quindi ogni confronto esclude metà dell'albero rimasto.
Costruisci un albero binario di ricerca in Python: inserisci valori, cercali ed elencali in ordine.
Quando si usa?
- Comprendere algoritmi e strutture dati.
- Osservare ogni passaggio e gestire i casi limite.
- Confrontare tempo di esecuzione e memoria.
Guarda come funziona
Inserisci valori per vedere dove finiscono, cerca un valore per seguirne il percorso ed esegui una visita per vedere l'ordine dei nodi.
Codice di esempio
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))
Output previsto
inorder: [20, 30, 40, 50, 60, 70, 80]
contains 60: True
contains 65: False
height: 3
Come funziona
insert() scende dalla radice e aggancia il valore al suo posto. contains() segue un solo percorso, che in un albero bilanciato richiede O(log n) passi. Una visita inorder visita sinistra, nodo, destra, quindi i valori escono ordinati.
Modifica i valori ed esegui il programma nel compilatore Python online CodeUtility senza installare Python.
Esercizi pratici
Modifica gli input e verifica i casi limite prima di usare dataset più grandi.
- Prova input vuoto, un elemento e duplicati.
- Stampa lo stato dopo ogni passaggio.
- Confronta le prestazioni con un’altra soluzione.
Esercitati con una sfida
Usa ciò che questa lezione spiega per risolvere un problema reale. Ogni sfida gira nel browser, con test immediati e una revisione dell'IA.
- Tree Diameter A tree is a connected undirected graph with no cycles. Media
- Dimensioni delle cartelle con Composite Calcola la dimensione totale di ogni cartella in un albero in cui le cartelle contengono file e altre cartelle. Media