11.07.2015 Views

Esercizi di Algoritmi e Strutture Dati - Moreno Marzolla

Esercizi di Algoritmi e Strutture Dati - Moreno Marzolla

Esercizi di Algoritmi e Strutture Dati - Moreno Marzolla

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

6 Attraversamento in-or<strong>di</strong>ne iterativoScrivere un algoritmo iterativo per effettuare la visita in-or<strong>di</strong>ne <strong>di</strong> un alberobinario (non necessariamente <strong>di</strong> ricerca).Soluzione Per implementare l’algoritmo <strong>di</strong> visita in-or<strong>di</strong>ne facciamo uso <strong>di</strong>uno stack (pila). Gli elementi che inseriamo nello stack sono coppie < n, b >,essendo n un riferimento ad un nodo dell’albero, e b un valore booleano che puòessere true o false.algoritmo inor<strong>di</strong>ne-iter(Nodo t)Stack S;S.push( );while (!S.empty()) do := S.pop(); // estrai dallo stackif (f==true) thenvisita il nodo n;elseif (n.right != null) thenS.push( );en<strong>di</strong>fS.push( );if (n.left != null) thenS.push( );en<strong>di</strong>fen<strong>di</strong>fendwhileL’idea dell’algoritmo è la seguente: ogni nodo n viene inizialmente inseritonello stack con flag settato a false. Quando un nodo v con flag settato a falseviene estratto dallo stack, inseriamo prima il figlio destro, poi il nodo v con flagsettato a true, e quin<strong>di</strong> il figlio sinistro. Quando estraiamo dallo stack un nodocon flag settato a true, è giunto il momento <strong>di</strong> “visitare” il nodo, che non verràulteriormente reinserito.7 Albero inversoDato un albero binario, i cui no<strong>di</strong> contengono elementi interi, si scriva unaprocedura <strong>di</strong> complessità ottima per ottenere lalbero inverso, ovvero un alberoin cui il figlio destro (con relativo sottoalbero) è scambiato con il figlio sinistro(con relativo sottoalbero).Soluzionealgoritmo inverti(Nodo t)if (t == NULL) then6

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!