PDA

View Full Version : [C++] esercizio alberi


Fede865
17-11-2009, 13:04
Ciao a tutti! :-)
Qualcuno mi può dare una mano per risolvere qst esercizio sugli alberi?
Ho proprio difficoltà con questi esercizi
Dato un albero binario A di numeri interi positivi,
scrivere un programma C++ che determini e
stampi quale tra le tre visite: anticipata,
posticipata ed infissa consentirebbe di stampare
il maggior numero di
nodi secondo la seguente regola:
stampare un valore solo se è il primo o se
è maggiore dell’ultimo stampato precedentemente.
A(albero binario)
2
6 7

4 9 8 3

7 9

Esempio: dato l’albero A sopra raffigurato,
le stampe consentite dalle tre visite sarebbero:
anticipata: 2, 6, 7, 8, 9
posticipata: 4, 5, 6, 7, 8, 9
infissa: 4, 6, 7, 8, 9
quindi la funzione deve restituire: posticipata
N.B. l’output della funzione deve essere solo
il risultato relativo alla visita, non la stampa dei nodi

Spero qualcuno mi aiuti!:)

yorkeiser
17-11-2009, 14:13
Dubito che qualcuno ti aiuterà se non cominci a buttar giù un po' di codice

Fede865
17-11-2009, 14:21
Nell'altra discussione ho buttato giù il mio codice e nessuno mi ha risp!!!
Sono nuova del forum e ancora nn so nemmeno se sn chiara a spiegare gli esercizi

yorkeiser
17-11-2009, 14:50
La spiegazione dell'esercizio è chiara, ora prova a postare quello che hai fatto.
Ti ricordo che da regolamento è vietato svolgere esercizi per intero ;)

marco.r
17-11-2009, 14:50
Ciao a tutti! :-)
Qualcuno mi può dare una mano per risolvere qst esercizio sugli alberi?


Spero qualcuno mi aiuti!:)
Dovresti perlomeno dire cosa non ti torna. L'esercizio, la teoria...

banryu79
17-11-2009, 17:44
Sì, lasciando perdere per un momento il codice sorgente, prova a spiegare a parole tue i singoli passi da compiere per risolvere il problema, così è più facile aiutarti :)

Fede865
18-11-2009, 09:44
Allora!
Io vorrei visitare l'albero con le tre visite e mettere l'elenco da qualche parte, un vettore, una lista..
Dopo di che vorrei applicare la regola che mi chiede e tenere solo i nodi che riesco a visitare in base a quella regola... poi restituire il nome delle visita che ha più nodi visitati.
A parole riesco, ma quando inizio a scrivere il codice mi perdo... mi manca un pò di teoria..:mbe:

banryu79
18-11-2009, 11:23
Allora!
Io vorrei visitare l'albero con le tre visite e mettere l'elenco da qualche parte, un vettore, una lista..

Bene, questo potrebbe essere un primo passo che tradotto in termini di codice sorgente significa questo:
- scrivere una funzione che, compiendo una visita inorder (infissa) di un albero produca in output l'array degli elementi così incontrati;
- scrivere una funzione che, compiendo una visita postorder (posticipata) di un albero produca in output l'array degli elementi così incontrati;
- scrivere una funzione che, compiendo una visita preorder (anticipata) di un albero produca in output l'array degli elementi così incontrati;

In questo modo hai i tre array degli elementi incontrati in ordine secondo ciascun metodo di visita dell'albero.


Dopo di che vorrei applicare la regola che mi chiede e tenere solo i nodi che riesco a visitare in base a quella regola...

La regola era, cito:"stampare un valore solo se è il primo o se
è maggiore dell’ultimo stampato precedentemente" che banalmente implica un ordine crescente sugli elementi da considerare nell'array.
Quindi una funzione che preso in input un array, restituisca un intero indicante il numero di elementi presenti nell'array, a partire dal primo e proseguendo con i successivi, che rispettano la relazione d'ordine.


poi restituire il nome delle visita che ha più nodi visitati.

Implementato il secondo punto e verificato l'output per i tre array hai trovato la risposta.