Risultati da 1 a 5 di 5

Discussione: [C] AIUTO ALBERO BINARIO

  1. #1
    New Member
    Data Registrazione
    19-11-2005
    Messaggi
    3

    [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

  2. #2
    New Member
    Data Registrazione
    20-11-2005
    Messaggi
    5
    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,

  3. #3
    New Member
    Data Registrazione
    19-11-2005
    Messaggi
    3
    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

  4. #4
    Super Member L'avatar di hannibal
    Data Registrazione
    18-02-2003
    Località
    Cesena - FC
    Messaggi
    510
    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.

  5. #5
    New Member
    Data Registrazione
    19-11-2005
    Messaggi
    3
    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

Segnalibri

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
  •