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 nodi incontri i nodi nell'ordine .
- Dire quali delle seguenti sequenze può rappresentare la visita in postorder dello stesso albero (motivando la risposta): , , .
- Disegnare l'albero compatibile con le due sequenze di preorder e postorder.
Richiami
- 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 è (prima in preorder), quindi deve essere l'ultima in postorder.
- : l'ultimo è , non impossibile.
- : l'ultimo è impossibile.
- : l'ultimo è ; verificato al punto 2 che esiste un albero compatibile possibile.
2. Ricostruzione dell'albero
Preorder , postorder . Tolta la radice restano (preorder) e (postorder); bisogna spezzarle in blocchi che corrispondono ai sottoalberi dei figli di .
- Il primo figlio di è (primo in preorder dopo ). In postorder il blocco del suo sottoalbero finisce con : . Quindi il sottoalbero di contiene , con preorder e postorder .
- Tolta la radice : preorder , postorder . Se avesse come discendente, in postorder precederebbe ; poiché in postorder viene prima, e sono due foglie fratelli, figli di .
- Il blocco rimanente è in preorder e in postorder: è la radice (primo in preorder, ultimo in postorder) e è suo figlio.
L'albero è:
A
/ \
B E
/ \ \
C D FControllo: preorder ✓; postorder ✓. L'albero è anche unico: non può essere una foglia, perché allora sarebbe il primo in postorder, mentre il primo è . (Verificato enumerando tutti i alberi ordinati con preorder e radice : solo questo ha postorder ; per e non ce ne sono.)
Osservazione generale
Due nodi con prima di in preorder: se in postorder viene dopo , è antenato di ; se viene prima, sta a sinistra di (non è un antenato). In un albero ordinato (non binario) preorder e postorder insieme determinano l'albero in modo unico (verificato su tutti i alberi di 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 inverso di ).
- Dimenticare che ogni sottoalbero è un blocco contiguo in entrambe le sequenze.
Versione ripasso
Testo. Albero ordinato di nodi con preorder . (1) Quali tra , , possono essere il postorder? (2) Disegnare l'albero.
- Regole (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 →): radice = prima in preorder e ultima in postorder; ogni sottoalbero è un blocco contiguo, che in preorder inizia e in postorder finisce con la sua radice.
- (1) (finisce con ) e (finisce con ) no; sì.
- (2) radice ; primo figlio , blocco postorder ⇒ sottoalbero con , foglie figlie di ; resto / ⇒ con figlio . Albero: ; unico ( non può essere foglia perché il primo in postorder è ).
- Fatto generale: prima di in preorder e dopo in postorder ⇒ antenato di ; prima in entrambi ⇒ a sinistra di .
- Errori: radice non controllata; postorder = inverso del preorder; blocchi non contigui.