Algoritmi Python

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

Esegui codice →
main.py
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.

  1. Prova input vuoto, un elemento e duplicati.
  2. Stampa lo stato dopo ogni passaggio.
  3. Confronta le prestazioni con un’altra soluzione.
Esegui nell’IDE Python →

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.

Tutte le sfide