Salta al contenuto
Note per Studenti Esercizio 6 · preorder e postorder compatibili

Esercizio 6preorder e postorder compatibili

In questa pagina 5

Testo (esercizio di lezione sulle visite di alberi). Si supponga che la visita in preorder di un albero ordinato di 66 nodi incontri i nodi nell'ordine ABCDEFABCDEF.

  1. Dire quali delle seguenti sequenze può rappresentare la visita in postorder dello stesso albero (motivando la risposta): BAFECDBAFECD, CDBFEACDBFEA, CDAEFBCDAEFB.
  2. Disegnare l'albero compatibile con le due sequenze di preorder e postorder.

Richiami

In un albero ordinato (vedi 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 preorder visita prima il nodo e poi i sottoalberi dei figli da sinistra a destra: la radice è la prima della sequenza;
  • il postorder visita prima i sottoalberi dei figli e poi il nodo: la radice è l'ultima;
  • ogni sottoalbero occupa un blocco contiguo di nodi in entrambe le sequenze: in preorder inizia con la sua radice, in postorder finisce con la sua radice.

1. Quale può essere il postorder

La radice è AA (prima in preorder), quindi deve essere l'ultima in postorder.

  • BAFECDBAFECD: l'ultimo è DD, non AA ⇒\Rightarrow impossibile.
  • CDAEFBCDAEFB: l'ultimo è BB ⇒\Rightarrow impossibile.
  • CDBFEACDBFEA: l'ultimo è AA; verificato al punto 2 che esiste un albero compatibile ⇒\Rightarrow possibile.

2. Ricostruzione dell'albero

Preorder ABCDEFABCDEF, postorder CDBFEACDBFEA. Tolta la radice AA restano BCDEFBCDEF (preorder) e CDBFECDBFE (postorder); bisogna spezzarle in blocchi che corrispondono ai sottoalberi dei figli di AA.

  • Il primo figlio di AA è BB (primo in preorder dopo AA). In postorder il blocco del suo sottoalbero finisce con BB: CDBCDB. Quindi il sottoalbero di BB contiene {B,C,D}\{B, C, D\}, con preorder BCDBCD e postorder CDBCDB.
    • Tolta la radice BB: preorder CDCD, postorder CDCD. Se CC avesse DD come discendente, in postorder DD precederebbe CC; poiché in postorder CC viene prima, CC e DD sono due foglie fratelli, figli di BB.
  • Il blocco rimanente è EFEF in preorder e FEFE in postorder: EE è la radice (primo in preorder, ultimo in postorder) e FF è suo figlio.

L'albero è:

        A
      /   \
     B     E
    / \     \
   C   D     F

Controllo: preorder A,B,C,D,E,FA, B, C, D, E, F ✓; postorder C,D,B,F,E,AC, D, B, F, E, A ✓. L'albero è anche unico: BB non può essere una foglia, perché allora sarebbe il primo in postorder, mentre il primo è CC. (Verificato enumerando tutti i 4242 alberi ordinati con preorder ABCDEFABCDEF e radice AA: solo questo ha postorder CDBFEACDBFEA; per BAFECDBAFECD e CDAEFBCDAEFB non ce ne sono.)

Osservazione generale

Due nodi X,YX, Y con XX prima di YY in preorder: se in postorder XX viene dopo YY, XX è antenato di YY; se viene prima, XX sta a sinistra di YY (non è un antenato). In un albero ordinato (non binario) preorder e postorder insieme determinano l'albero in modo unico (verificato su tutti i 4242 alberi di 66 nodi: i postorder sono tutti distinti); in un albero binario no, perché un unico figlio può essere il sinistro o il destro.

Errori comuni

  • Non controllare che la radice sia l'ultima del postorder: scarta subito due delle tre sequenze.
  • Confondere postorder con l'inverso del preorder: sono diversi (in generale CDBFEA≠CDBFEA \ne inverso di ABCDEFABCDEF).
  • Dimenticare che ogni sottoalbero è un blocco contiguo in entrambe le sequenze.

Versione ripasso

Testo. Albero ordinato di 66 nodi con preorder ABCDEFABCDEF. (1) Quali tra BAFECDBAFECD, CDBFEACDBFEA, CDAEFBCDAEFB possono essere il postorder? (2) Disegnare l'albero.

Teoria collegata