STRUTTURE DATI AVANZATE Abstract Data Types Presentazione realizzata da: Mario Capurso – Altamura Michele Doronzo Aldo Lamacchia.

Slides:



Advertisements
Presentazioni simili
Premessa: si assume di aver risolto (correttamente
Advertisements

Algoritmi e Strutture dati Mod B
Algoritmi e Strutture Dati
Il problema del minimo albero ricoprente in un grafo non cooperativo
Algoritmi e Strutture Dati (Mod. B)
Tipi di dato astratti Lista, Pila, Coda, Albero.
Estendere i linguaggi: i tipi di dato astratti
Strutture dati lineari
Le Strutture Dati M. Capurso con materiale di: G.Piccolo, A.Arcieri, Lamacchia F. Piccolo, B. Monterisi (Abstract Data Types)
Introduzione Cosa sono le reti di Petri?
Algoritmi e Strutture Dati
UD 3: “Le Liste” UD 4: “Pile e Code” UD 5: “Alberi e grafi”
Lez. 91 Universita' di Ferrara Facolta' di Scienze Matematiche, Fisiche e Naturali Laurea Specialistica in Informatica Algoritmi Avanzati Alberi di ricerca.
Generazione di Piani attraverso Grafi di Pianificazione
Strutture dati elementari
Il problema del cammino minimo tra 2 nodi in un grafo con archi privati.
Intelligenza Artificiale 2 Metodologie di ragionamento Prof. M.T. PAZIENZA a.a
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Esercizi su alberi binari
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 05/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 28/04/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 15/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
U V U V (a) |cfc|=2 prima e dopo (b) |cfc|=2 prima e |cfc|=1 dopo
Il problema del minimo albero ricoprente in un grafo con archi privati
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 Un albero è un grafo.
Capitolo 11 Grafi e visite di grafi Algoritmi e Strutture Dati.
Flusso Massimo Applicazione di algoritmi
Cammini minimi Algoritmo SPT.Acyclic
Allocazione dinamica della memoria
Algoritmi e Strutture Dati (Mod. B)
Grafi.
1 ListaDiElem Cancella( ListaDiElem lista, TipoElemento elem ) { ListaDiElem puntTemp; if( ! ListaVuota(lista) ) if( lista–>info == elem ) { puntTemp =
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Ispezione lineare La funzione hash h(k,i) si ottiene da una funzione hash ordinaria h'(k) ponendo L’esplorazione inizia dalla cella h(k,0) = h'(k) e continua.
Algoritmi e Strutture Dati
Camil Demetrescu, Irene Finocchi, Giuseppe F. ItalianoAlgoritmi e strutture dati Copyright © The McGraw - Hill Companies, srl 1 K 4 è planare? Sì!
Algoritmi e Strutture Dati
Algoritmi Paralleli e Distribuiti a.a. 2008/09 Lezione del 08/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Grafi Rappresentazione mediante liste di adiacenza:
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Ugo de'Liguoro - Informatica 2 a.a. 03/04 Lez. 5 Le strutture informative Corso di Informatica 2 a.a. 2003/04 Lezione 5.
Esercitazione su Vector. Permette di definire collezioni di dati generiche, che sono in grado di memorizzare elementi di ogni sottotipo di Object Definito.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche
Olimpiadi di Informatica 2010 Giornate preparatorie
Flusso Massimo Applicazione di algoritmi
1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.
Capitolo 12 Minimo albero ricoprente: Algoritmo di Kruskal Algoritmi e Strutture Dati.
Capitolo 11 Visite di grafi Algoritmi e Strutture Dati.
Algoritmi e Strutture Dati
Flusso di Costo Minimo Trasformazioni Equivalenti e Trasformazioni Inverse Viene data la seguente rete di flusso, in cui i valori riportati vicino agli.
Laureando: Enrico Sperindio Relatore: Prof. GIORGIO ROMANIN JACUR
Prof. Cerulli – Dott. Carrabs
Capitolo 13 Cammini minimi: Bellman e Ford Algoritmi e Strutture Dati.
Flusso di Costo Minimo Applicazione di algoritmi: Cammini Minimi Successivi (SSP) Esercizio 1 Sia data la seguente rete di flusso, in cui i valori riportati.
Informatica e Informatica di Base
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
Introduzione alla LOGICA MATEMATICA Corso di Matematica Discreta. Corso di laurea in Informatica. Prof. Luigi Borzacchini VIII. Insiemi e Strutture Dati.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Strutture dati di tipo astratto 19 Strutture dati,
OTTIMIZZAZIONE DI UN PERCORSO GRAFO CAMMINO MINIMO.
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Albero ricoprente di costo minimo Lezione n°12.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi Lezione n°10.
Algoritmi Avanzati a.a. 2011/12 Lezione del 02/05/2009 Prof. ssa ROSSELLA PETRESCHI a cura del Dott. SAVERIO CAMINITI.
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Algoritmi Avanzati a.a.2012/2013 Prof.ssa Rossella Petreschi Albero Ricoprente Lezione n°9.
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

STRUTTURE DATI AVANZATE Abstract Data Types Presentazione realizzata da: Mario Capurso – Altamura Michele Doronzo Aldo Lamacchia Claudio Maria

A.D.T. : Cosa sono? Sono un insieme dinformazioni e algoritmi che riflettono la realtà nel nostro computer e quindi la rappresentano. Sono un insieme dinformazioni e algoritmi che riflettono la realtà nel nostro computer e quindi la rappresentano. Gli oggetti reali diventano oggetti virtuali Gli oggetti reali diventano oggetti virtuali Gli algoritmi reali diventano algoritmi virtuali Gli algoritmi reali diventano algoritmi virtuali

Come si rappresentano Le strutture dati sono formate da tre livelli: - CONCETTUALE ovvero come appare nel mondo reale; - LOGICO si occupa dellelenco di proprietà e delle procedure; - FISICO si occupa di come vengono allocate le proprietà nella memoria di un computer e di come vengono realizzate le procedure nel computer.

A.D.T. Avanzate Le strutture dati avanzate sono strutture che, per essere realizzate hanno bisogno di strutture più semplici (vettori, matrici, stack, code, ecc..). Esempi sono: Il grafo Il grafo Lalbero Lalbero Lalbero binario Lalbero binario

A.D.T. Grafo LIVELLO CONCETTUALE -1- Il grafo rappresenta situazioni del mondo reale che individua nodi collegati da archi. Il grafo è identificabile con un insieme I. Per ottenere tutte le coppie possibili si applica I x I. Inoltre esiste un sotto-insieme di I chiamato R che contiene tutti i nodi in collegamento (archi).

A.D.T. Grafo LIVELLO CONCETTUALE -2- Un grafo è formato da nodi. Il collegamento tra due nodi è un arco. Un cammino è una successione di archi, a condizione che il nodo finale di un arco coincide con il nodo iniziale dellarco successivo. Un grafo può essere orientato o non orientato: nel primo esistono le direzioni, nel secondo no. Un grafo inoltre può essere completo se, ogni suo nodo è collegato con tutti gli altri.

A.D.T. Grafo LIVELLO LOGICO -1- New( ) crea un grafo vuoto Destroy ( ) distrugge un grafo AddNode( etichetta ) aggiunge un nodo con nome etichetta e ne restituisce l ID DeleteNode ( ID ) elimina il nodo ID-esimo e i suoi archi AddArc(ID1, ID2, p) inserisce un arco tra il nodo ID1 e il nodo ID2 e gli assegna il peso p

A.D.T. Grafo LIVELLO LOGICO -2- DeleteArc ( ID1, ID2 ) elimina larco tra il nodo ID1 e il nodo ID2 IsEmpty ( ) restituisce vero se il Grafo è vuoto e falso se non lo è IsFull( ) restituisce vero se il Grafo è pieno e falso se non lo è IsArc ( ID1,ID2 ) controlla se esiste larco e se cè, ne restituisce il peso p Cerca ( etichetta, trovato, ID ) controlla se nel Grafo esiste un nodo con nome etichetta e, se cè, ne restituisce l ID

A.D.T. Grafo LIVELLO FISICO -1- Il modello fisico che analizzeremo sarà quello in modalità consecutiva. Questa implementazione risulta essere la più comoda e veloce ma ha qualche problema nelleliminazione dei nodi infatti, nel vettore quando viene lanciato il sottoprogramma DeleteNode il nodo, viene cancellato logicamente e, lo spazio non potrà più essere utilizzato. Limplementazione consecutiva sfrutta un vettore per contenere i nodi del grafo e una matrice per contenere i pesi degli archi. 0Ruvo 1Barletta 2Trani 3Andria

A.D.T. Grafo New() t = 0 La new() costruisce il grafo mettendo il puntatore del vettore t a 0. Destroy() t = 0 La destroy() distrugge il grafo mettendo il puntatore del vettore t a 0. IsFull() se t = m allora ritorna Vero altrimenti ritorna Falso fine se La IsFull() riporta un valore vero se il grafo è pieno, mentre falso se non lo è. IsEmpty() se t = 0 allora ritorna Vero altrimenti ritorna Falso fine se La IsEmpty() riporta un valore vero se il grafo è pieno, mentre falso se non lo è. LIVELLO FISICO -2-

A.D.T. Grafo t AddNode(s) se non IsFull() allora t=t+1 v(t)=s ritorna t fine se Se il grafo non è pieno l AddNode(s) prima incrementa la posizione e poi assegna al vettore letichetta s e riporta lID DeleteNode(id) se 1<=id<=t allora v(id)="" per i da 1 a t mat(id,i)=0 mat(i,id)=0 fine per i fine se La DeleteNode(id), dopo aver controllato che lID si trova fra 1 e t, cancella letichetta del nodo e i suoi relativi archi. p IsArc(id1,id2) se 1<=id1<=t e 1<=id2<=t allora ritorna mat(id1,id2) fine se La IsArc(id1,id2), riporta indietro il peso che cè fra due nodi, dopo aver controllato che gli ID sono compresi fra 1 e t. LIVELLO FISICO -3-

A.D.T. Grafo AddArc(id1,id2,p) se 1<=id1<=t e 1<=id2<=t allora mat(id1,id2)=p fine se La AddArc(id1,id2,p) aggiunge il peso p fra due nodi dopo aver controllato che i due nodi sono compresi fra 1 e t DeleteArc(id1,id2) se 1<=id1<=t e 1<=id2<=t allora mat(id1,id2)=0 fine se La DeleteArc(id1,id2) cancella il peso dellarco che cè fra due nodi dopo aver controllato che lID si trova fra 1 e t Cerca(s,trovato,id) trovato=Falso per i da 1 a t se v(i)=s allora trovato=Vero id=i ritorna fine se fine per i ritorna La Cerca(s,trovato,id) riporta indietro lID del nodo. Cè un ciclo che confronta lID da cercare con tutti gli altri id del vettore, e se viene trovato ne riporta lID. LIVELLO FISICO -4-

A.D.T. Grafo Algoritmo di Moore – Bellman - D'Esopo Per i da 1 a n dist( i ) = +infinito prec( i ) = -1 Fine per i Push( l ) dist( l ) = 0 Mentre non IsEmpty( ) Pop( u ) Per ogni Arco(u, v) newdist = dist( u )+p( u, v ) Se newdist<dist( v ) allora dist( v ) = newdist prec( v )=u Push( v ) Fine se Fine per Fine mentre Lalgoritmo di Lalgoritmo di Moore – Bellman - D'Esopo serve per calcolare il percorso minimo da un nodo l a tutti gli altri nodi del grafo. Inizzialmente lalgoritmo pone il vettore Dist( ) a infinito e il vettore Prec ( ) a – 1. Subito dopo mette nello stack l e pone Dist ( l ) a zero. A questo punto incomincia un ciclo mentre lo stack non è vuoto: viene fatto il pop di u e per ogni arco ( u, v ) viene calcolata la nuova distanza e se è minore di Dist (v) la nuova distanza è Dist ( v ) u diveta Prec ( v ) e si inserisce nello stack v. LIVELLO FISICO -5-

A.D.T. Albero LIVELLO CONCETTUALE -1- Un albero è un caso particolare di grafo in cui esiste un nodo detto radice che, se eliminato divide il grafo in n sottografi disgiunti, ognuno dei quali è un albero. Un albero è un grafo connesso e senza cicli. -Un grafo si dice connesso se e solo se per ogni x,y elemento di I esiste almeno un cammino che incomincia da x e finisce alla y. -Si dice ciclo una successione di archi a1, a2,…,an dove, il nodo iniziale e il nodo finale coincidono. Un albero è un grafo in cui per ogni coppia x, y elemento di I, esiste uno e un solo cammino che li unisce.

A.D.T. Albero LIVELLO LOGICO -1- New( ) crea un albero vuoto Destroy ( ) distrugge un albero p AddNode( s ) aggiunge un nodo con nome etichetta e ne restituisce l ID DeleteNode ( p ) elimina il nodo che si trova allindirizzo si memoria p AddSon(px, py) aggiunge un figlio concatenandolo in coda ai fratelli

A.D.T. Albero LIVELLO LOGICO -2- AddBro(px, py) aggiunge un padre fra i nodi agli indirizzi di memoria px e py DeleteSon(px, py) elimina un figlio DeleteBro(px, py) elimina il padre DeepFirstSearch(chiave, r) effettua una ricerca per profondità BreadthFirstSearch(chiave, r) effettua una ricerca per livelli

A.D.T. Albero LIVELLO FISICO -1- Il modello fisico che analizzeremo sarà quello in modalità non consecutiva. Questa implementazione risulta essere la più comoda perché i suoi algoritmi lavoreranno utlizzando non più vettori e matrici ma i puntatori, quindi sugli indirizzi di memoria. Limplementazione non consecutiva sfrutta la memoria RAM per contenere i nodi allocati dellalbero. Giuseppe Michele Luca Laura Marco Luigi Giuseppe LauraLucaMichele MarcoLuigi Sergio [albero nella realtà][albero nel computer] SonLinkInfoBroLink

A.D.T. Albero p AddNode(s) p=allocanodo p.info=s p.son=p.bro=NULL ritorna p La AddNode(s) aggiunge un nodo allocandolo, prima pone letichetta uguale alla parte info dell nodo, e poi fa puntare a terra i link SonLink e BroLink perché non collegati. DeleteNode(p) se p=NULL allora ritorna se p.son=NULL e p.bro=NULL allora libera p fine se La DeleteNode(id), dopo aver controllato che p non punti a terra libera il nodo che cè fra il padre e il figlio. AddSon(px,py) se px=NULL o py=NULL allora ritorna py.bro=px.son px.son=py La AddSon(px,py), dopo aver controllato che px e py non puntino a terra, aggiunge un figlio concatenandolo in coda ai fratelli. AddBro(px,py) se px=NULL o py=NULL allora ritorna px.bro=px.bro px.bro=py La AddBro(px,py), dopo aver controllato che px e py non puntino a terra, aggiunge un padre al quale saranno concatenati i suoi figli. LIVELLO FISICO -2-

A.D.T. Albero DeleteSon(px,py) se px=NULL o py=NULL allora ritorna prec=pxp=px.son se p=py allora prec.son=p.broritorna fine se mentre p<>NULL se p=py allora prec.bro=p.broritornaaltrimentiprec=pp=p.bro fine se fine mentre DeleteBro(px,py) se px=NULL o py=NULL allora ritorna prec=pxp=px.bro mentre p<>NULL se p=py allora prec.bro=p.broritornaaltrimentiprec=pp=p.bro fine se fine mentre La DeleteSon(px, py) elimina un figlio. Nell algoritmo possiamo notare un ciclo in cui viene cercato il figlio da eliminare. La DeleteBro(px,py) elimina il padre dall albero. Ovviamente il padre non potrà essere eliminato se ha dei figli. LIVELLO FISICO -3-

A.D.T. Albero LIVELLO LOGICO -1- New( ) crea un albero vuoto Destroy ( ) distrugge un albero AddNode( s ) aggiunge un nodo con nome etichetta e ne restituisce l ID DeleteNode ( ID ) elimina il nodo ID-esimo e i suoi archi AddArc(ID1, ID2, p) inserisce un arco tra il nodo ID1 e il nodo ID2 e gli assegna il peso p

A.D.T. Albero ALGORITMI DI RICERCA NELLALBERO -1- Algoritmo di ricerca per profondità DeepFirstSearch(chiave,r) se r=NULL allora ritorna NULL se r.info=chiave allora ritorna r cs=DeepFirstSearch(chiave,r.firstson) se cs<>NULL allora ritorna cs altrimenti ritorna DeepFirstSearch(chiave,r.nextbro) fine se Questalgoritmo richiede in input la chiave (quello che si vuole trovare), e lindirizzo della radice (r). Allinizio controlla lesistenza dellindirizzo e in caso affermativo continua. A questo punto si controlla se nella radice cè la chiave e se cè ne riporta lindirizzo altrimenti chiama se stesso ma questa volta passandogli il figlio. Se non trova neanche nei figli allora ripete la ricerca nei fratelli.

A.D.T. Albero ALGORITMI DI RICERCA NELLALBERO -2- Algoritmo di ricerca per larghezza o livelli BreadthFirstSearch(chiave,r) se r=NULL allora ritorna NULL Enq(r) ripeti mentre non isempty() Deq(r) se r.info=chiave allora ritorna r ScandisciFigli(r) fine ripeti ScandisciFigli(r) p=r.firstson mentrep<>NULL Enq(p) p=p.nextbro fine mentre Questalgoritmo richiede in input la chiave (quello che si vuole trovare), e lindirizzo della radice (r). Allinizio controlla lesistenza dellindirizzo e in caso affermativo continua mettendo in coda r. A questo punto incomincia un ciclo mentre la coda non è vuota: per prima cosa si estrae il primo elemento dalla coda e lo confronta con la chiave e, in caso affermativo ne riporta lindirizzo altrimenti chiama la procedura ScandisciFigli(r) che non fa altro che mettere in coda tutti i figli. Una volta messi in coda lalgoritmo principale li ripesca e li confronta con la chiave e se non li trova procede scendendo di livello e ripetendo la stessa procedura descritta.

A.D.T. Albero Binario LIVELLO CONCETTUALE -1- Un albero binario è un albero che ha una radice e massimo due figli. a c b f e d

A.D.T. Albero Binario RAPPRESENTAZIONE MODALITA NON CONSECUTIVA DELL' ALBERO BINARIO -1- La rappresentazione più usata per l'albero binario in modalità non consecutiva è la seguente: Info L.LinkR.Link Link Sinistro Link Destro

A.D.T. Albero Binario LIVELLO LOGICO -1- New( ) crea un albero binario vuoto Destroy ( ) distrugge un albero binario AddNode( s ) aggiunge un nodo all'albero binario DeleteNode ( p ) elimina il nodo solo se si è certi che non abbia figli AddArcSx(Px,Py) inserisce un arco a sinistra tra due nodi

A.D.T. Albero Binario LIVELLO LOGICO -2- AddArcDx(Px,Py) inserisce un arco a destra tra due nodi DeleteArcSx(Px,Py) cancella un arco a sinistra tra due nodi DeleteArcDx(Px,Py) cancella un arco a destra tra due nodi IsArc(Px,Py) controlla se esiste l'arco e se lo trova riporta un valore vero altrimenti falso

A.D.T. Albero Binario LIVELLO FISICO -1- La IsEmpty() riporta un valore vero se il puntatore p è a terra, mentre falso se non lo è. IsEmpty() se p = NULL allora ritorna Vero altrimenti ritorna Falso fine se La IsFull() ritorna sempre Falso perchè si suppone che la RAM non si riempia mai, ma non sarebbe una cattiva idea realizzarne una che funzioni davvero. IsFull() ritorna Falso La destroy() distrugge l''albero binario mettendo il puntatore p a null. Destroy() p = NULL La new() costruisce l'albero binario mettendo il puntatore p a null. New() p = NULL

A.D.T. Albero Binario LIVELLO FISICO -2- p <-- AddNode(s) p=allocanodop.info=sp.sx=p.dx=NULL ritorna p LAddNode costruisce il nodo dove alla radice assegna il valore s e al link sinistro e destro il assegna il valore NULL DeleteNode(p) se p=NULL allora ritorna se p.sx=NULL e p.dx=NULL allora libera p fine se Se il puntatore ha valore NULL allora ritorna altrimenti se il puntatore sinistro e quello destro hanno valore NULL, il nodo può essere cancellato. Vero o Falso <-- IsArc(px,py) se px=NULL o py=NULL allora ritorna se px.sx=py o px.dx=py allora ritorna Vero altrimenti ritorna Falso fine se fine se La IsArc(px,py) riporta un valore che può essere vero o falso. Se px e Py hanno valore NULL allora ritorna, altrimenti se il link sinistro e destro hanno valore Py, esiste larco e quindi riporta un valore vero altrimenti falso.

A.D.T. Albero Binario L' AddArcSx(px,py) controlla se px o py hanno valore NULL allora ritorna altrimenti se il link sinistro ha valore NULL assegna il valore py DeleteArcSx(px,py) se px=NULL o py=NULL allora ritorna se px.sx=py allora px.sx=NULL fine se DeleteArcDx(px,py) se px=NULL o py=NULL allora ritorna se px.dx=py allora px.dx=NULL fine se LIVELLO FISICO -3- AddArcSx(px,py) se px=NULL o py=NULL allora ritorna se px.sx=NULL allora px.sx=py fine se AddArcDx(px,py) se px=NULL o py=NULL allora ritorna se px.dx=NULL allora px.dx=py fine se L' AddArcDx(px,py) controlla se px o py hanno valore NULL allora ritorna altrimenti se il link destro ha valore NULL assegna il valore py L' DeleteArcSx(px,py) controlla se px o py hanno valore NULL allora ritorna, altrimenti se il link sinistro ha valore py assegna il valore NULL al link sinistro L' DeleteArcDx(px,py) controlla se px o py hanno valore NULL allora ritorna, altrimenti se il link destro ha valore py assegna il valore NULL al link destro

A.D.T. Albero Binario VISITE ALLALBERO BINARIO Visitare un albero significa passare da ogni nodo uno e una sola volta. Tutti gli algoritmi di visita sono ricorsivi, i principali sono: A B C DE VisitaAnt(p) se p=NULL allora ritorna stampa: p.info VisitaAnt(p.sx)VisitaAnt(p.dx) Visitando lalbero in maniera Anticipata avremmo: A, B, D, E, C. VisitaPost(p) se p=NULL allora ritorna VisitaPost(p.sx)VisitaPost(p.dx) stampa: p.info Visitando lalbero in maniera Posticipata avremmo: D, E, B, C, A. VisitaSimm(p) se p=NULL allora ritorna VisitaSimm(p.sx) stampa: p.info VisitaSimm(p.dx) Visitando lalbero in maniera Simmetrica avremmo:D, B, E, A, C