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 (Alberi binariAlbero binario e albero binario proprio; interfaccia; relazioni tra nodi, foglie e altezza (m = n-m+1, h+1 <= m <= 2^h, 2h+1 <= n <= 2^(h+1)-1) con dimostrazioni; visita inorder; parse tree e valutazione di espressioni; heightSum come esempio di calcolo di un'informazione più ricca.Alberi binari →, Visite di alberiVisite in preorder e postorder come schemi generali (template) da adattare; complessità Theta(n + somma dei costi di visita) perché la somma dei figli è n-1; esempi (indice di un libro, spazio occupato in un file system); profondità con il preorder, altezza con il postorder; antenato comune più basso.Visite di alberi →). Il numero di confronti per cercare una chiave è la profondità del suo nodo più uno: ad esempio, nell'albero del punto 1, cercare 99 costa i confronti con 77, 1010 e 99, cioè 33.

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). Come si ottiene a mano: per il nodo 55 prima tutto il sottoalbero sinistro (nodo 22: nessun figlio sinistro, quindi 22, poi il suo sottoalbero destro: nodo 44 che ha il figlio sinistro 33, quindi 3,43, 4), poi 55, poi il sottoalbero destro (nodo 88: prima 77, poi 88, poi 99).

(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 (con n=1000n=1000 chiavi inserite in ordine, cercare l'ultima richiede 10001000 confronti, contro i circa 1010 di un albero bilanciato, ⌊log⁡21000⌋+1\lfloor\log_2 1000\rfloor+1; Esponenziale e logaritmoLa funzione esponenziale a^x (base positiva diversa da 1) e la sua inversa, il logaritmo in base a, con grafici e proprietà.Esponenziale e logaritmo →). 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