Salta al contenuto
Note per Studenti Esercizio 16 · alberi binari di ricerca, inserimenti e visita inorder

Esercizio 16alberi binari di ricerca, inserimenti e visita inorder

In questa pagina 5

Testo (scritti del 30/01/2026 e del 07/08/2026, parte 1).

  1. Si consideri un Binary Search Tree (BST) inizialmente vuoto. Si inseriscono, nell'ordine dato, le chiavi 7,3,10,1,5,9,127, 3, 10, 1, 5, 9, 12. (a) Disegnare l'albero risultante. (b) Indicare l'ordine in cui vengono visitati i nodi eseguendo una visita inOrder.
  2. Si consideri un albero binario di ricerca inizialmente vuoto. Si inseriscono nell'ordine le chiavi 5,2,8,4,7,9,35, 2, 8, 4, 7, 9, 3. (a) Disegnare l'albero ottenuto dopo tutti gli inserimenti. (b) Scrivere la sequenza di chiavi visitata da una visita in-order. (c) Qual è la complessità al caso pessimo dell'operazione di ricerca in un albero binario di ricerca con nn nodi? Motivare brevemente.

Richiami

Inserimento (vedi Alberi binari di ricercaAlbero binario di ricerca come albero binario proprio con entry nei nodi interni e foglie vuote; inorder crescente; TreeSearch; get, put e remove (due casi, con predecessore inorder) in Theta(h); altezza fino a n-1; esempi di inserimenti; alberi aumentati con campi size e max e algoritmi di conteggio e interrogazione in O(h).Alberi binari di ricerca →): si parte dalla radice; si va a sinistra se la chiave è minore di quella del nodo, a destra se è maggiore, fino a trovare un posto vuoto (una foglia esterna), dove si crea il nodo. La visita in-order visita sinistra, nodo, destra e restituisce le chiavi in ordine crescente.

1. Chiavi 7,3,10,1,5,9,127, 3, 10, 1, 5, 9, 12

  • 77: radice.
  • 3<73 < 7: figlio sinistro di 77.
  • 10>710 > 7: figlio destro di 77.
  • 1<71 < 7, 1<31 < 3: figlio sinistro di 33.
  • 5<75 < 7, 5>35 > 3: figlio destro di 33.
  • 9>79 > 7, 9<109 < 10: figlio sinistro di 1010.
  • 12>712 > 7, 12>1012 > 10: figlio destro di 1010.
          7
        /   \
       3     10
      / \    / \
     1   5  9   12

(b) In-order: 1,3,5,7,9,10,121, 3, 5, 7, 9, 10, 12 (ordine crescente, come sempre). L'albero è perfetto (tutti i livelli pieni): altezza 22 con 7=23−17 = 2^3 - 1 nodi.

2. Chiavi 5,2,8,4,7,9,35, 2, 8, 4, 7, 9, 3

  • 55: radice.
  • 2<52 < 5: figlio sinistro di 55.
  • 8>58 > 5: figlio destro di 55.
  • 4<54 < 5, 4>24 > 2: figlio destro di 22.
  • 7>57 > 5, 7<87 < 8: figlio sinistro di 88.
  • 9>59 > 5, 9>89 > 8: figlio destro di 88.
  • 3<53 < 5, 3>23 > 2, 3<43 < 4: figlio sinistro di 44.
        5
      /   \
     2     8
      \   / \
       4 7   9
      /
     3

(b) In-order: 2,3,4,5,7,8,92, 3, 4, 5, 7, 8, 9. L'altezza è 33 (cammino 5,2,4,35, 2, 4, 3).

(c) Complessità al caso pessimo della ricerca. La ricerca segue un unico cammino dalla radice, con un numero costante di operazioni per nodo: costa Θ(h)\Theta(h), con hh altezza dell'albero. Nel caso pessimo l'albero degenera in una catena (ad esempio le chiavi inserite in ordine crescente) e h=n−1h = n - 1: la ricerca costa Θ(n)\Theta(n), quindi O(n)O(n) e Ω(n)\Omega(n) per quell'istanza. In un albero bilanciato sarebbe Θ(log⁡n)\Theta(\log n) (vedi Multi-way search tree e alberi (2,4)Multi-way search tree (nodi con più entry, d figli e d-1 chiavi ordinate), ricerca in O(d_max h), un MWS tree con n entry ha n+1 foglie; albero (2,4): nodi con 2-4 figli e tutte le foglie alla stessa profondità, altezza Theta(log n) con dimostrazione, operazioni in Theta(log n); idea di overflow e underflow; tabella di confronto con gli alberi binari di ricerca.Multi-way search tree e alberi (2,4) → per strutture con altezza logaritmica garantita).

Osservazione

Lo stesso insieme di chiavi dà alberi diversi a seconda dell'ordine di inserimento: le chiavi del punto 1 inserite come 1,3,5,7,9,10,121, 3, 5, 7, 9, 10, 12 danno una catena di altezza 66 invece di 22. Ciò che non cambia è la visita in-order, sempre crescente. (Alberi e visite verificati con un'implementazione.)

Errori comuni

  • Dimenticare che l'albero dipende dall'ordine di inserimento: ridisegnare l'albero a partire dalle chiavi ordinate è sbagliato.
  • Confondere in-order con preorder: il preorder del punto 1 è 7,3,1,5,10,9,127, 3, 1, 5, 10, 9, 12.
  • Dire che la ricerca è sempre O(log⁡n)O(\log n): lo è solo se l'albero è bilanciato.
  • Confrontare con il figlio sbagliato dopo aver sceso un livello (si confronta sempre con il nodo corrente, non con la radice).

Versione ripasso

Testo. BST vuoto con inserimenti (1) 7,3,10,1,5,9,127,3,10,1,5,9,12 e (2) 5,2,8,4,7,9,35,2,8,4,7,9,3: disegnare l'albero, dare la visita in-order; (c) complessità al caso pessimo della ricerca.

Teoria collegata