-
[C] AIUTO ALBERO BINARIO
Ciao a tutti
volevo chiedervi se gentilmente potreste risolvere un mio quesito:
avendo caricato in un albero binario delle struct, corrispondenti a dei prodotti e fatte in questo modo:
struct prodotto{
char codice[6]; //codice prodotto
int quantita; //quantità disponibile
int venduti; //pezzi venduti
struct prodotto *left;
struct prodotto *right;
}
come faccio a ricercare nell'albero quel prodotto che è stato maggiormente venduto (ovvero quello che ha il valore maggiore del campo venduti)
Potreste indicarmi una semplice funzione in c che effettui la visita dell'albero e mi restituisca il nodo cercato o alternativamente stampi a video il codice del prodotto più venduto?
Vi ringrazio,
Draganbao
-
la domanda nn è posta correttamente.
albero binario è troppo generico , come vengono inesriti gli elementi?
Forse intendi un struttuta tipo albero binario di ricerca.
Cmq lasciando perdere il tipo di struttura utilizzata percorri l albero in una qualsiasi maniera postorder preorder o leverl order e tieni traccia del massimo valore "venduti" in una variabile,
-
Sì l'albero è un albero binario di ricerca, ordinato rispetto alla chiave che è: codice
la funzione che ho provato a fare è questa...
void trovaArticoloPiuVenduto(struct prodotto *radice){
if(radice != NULL){
trovaArticoloPiuVenduto(radice->left);
if(radice->venduti > maxVenduti){
maxVenduti = radice->venduti;
prodottoPiuVenduto = radice;
}
trovaArticoloPiuVenduto(radice->right);
}
}
ho fatto una visita dell'albero e se il nodo visitato ha campo venduti > di maxVenduti salvo il nodo nella variabile globale prodottoPiuVenduto di tipo struct prodotto *.
In questo modo però sia la variabile maxVenduti sia la variabile prodottoPiuVenduto sono globali. Mi chiedevo se c'era un modo per effettuare il confronto..e solo al termine della visita di tutto l'albero restituire il nodo con campo venduti più grande.
Cerco di spiegarmi meglio: poniamo che 3 nodi vengano visitati, nel primo il campo venduti sia = a 1, nel secondo 2 e nel terzo 3. In tutti e tre i casi, il confronto avrà esito positivo e la variabile prodottoPiuVenduto punterà prima al nodo1, poi al nodo2 e infine al nodo3. Alla fine la variabile prodottoPiuVenduto punterà giustamente al nodo3, ma mi sembrano un po' inutili i due assegnamenti precedenti.
Non so se sono stato molto chiaro..ma spero mi abbiate capito.
Draganbao
-
Super Member
Trattandosi di funzioni ricorsive sei costretto ad utilizzare una variabile globale per memorizzare i dati. Se quello che cerchi è un'ottimizzazione delle prestazioni organizza il tuo albero come un albero binario di ricerca così ti ritroverai i valori ordinati e trovare il più grande sarà un'operazione computazionalmente molto meno costosa rispetto ad una visita completa dell'albero con relativi confronti.
-
E' già un albero binario di ricerca, ma è ordinato rispetto al codice, non rispetto al campo venduti.
Cmq mi va bene la soluzione con la variabile globale..
Grazie mille
Permessi di Scrittura
- Tu non puoi inviare nuove discussioni
- Tu non puoi inviare risposte
- Tu non puoi inviare allegati
- Tu non puoi modificare i tuoi messaggi
-
Regole del Forum
Segnalibri