Foglia

di il
6 risposte

Foglia

Ragazzi scusate sto cercando di eliminare una foglia da un albero,ma quando vado a stamparlo mi da errore qualcuno sa aiutarmi?
void foglia(struct tree *albero){
  if(albero->left==NULL && albero->right==NULL)
    free(albero);
    else{
foglia(albero->left);
foglia(albero->right);
    }
};

6 Risposte

  • Re: Foglia

    Che errore ti da di preciso?
  • Re: Foglia

    Quanto mando in stampa l'albero non me lo stampa non riesce accedere allo spazio di memoria da quanto ho capito io
  • Re: Foglia

    Semplicemente perchè tu liberi la memoria della foglia ma non annulli il puntatore che la punta.
    
    int foglia(struct tree *albero)
    {
        if(albero->left==NULL && albero->right==NULL)
        {
            free(albero);
            return 1;
        }
        else
        {
            if (foglia(albero->left))
                albero->left = NULL;
            if (foglia(albero->right));
               albero->right = NULL;
            return 0;
        }
    };
    o comunque una cosa simile a quella postata.
  • Re: Foglia

    Ciao ti ringrazio tanto per la risposta ma non ho capito quel return 1 e quella chiamata alla funzione nell if a cosa servono
  • Re: Foglia

    Quel return 1 serve a indicare al chiamante che hai trovato la foglia, e che perciò bisogna annullare il puntatore che puntava ad essa (vedi ramo else).

    Ovviamente anche nel main ci sarà qualcosa del tipo:
    
    if(foglia(albero))
        albero=NULL;
    
    In modo da non incorrere nell'errore quando l'albero è formato solo da un nodo.

    ciao
  • Re: Foglia

    Grazie tante!
Devi accedere o registrarti per scrivere nel forum
6 risposte