Compara altezza e numero foglie

di il
5 risposte

Compara altezza e numero foglie

Salve,
sto realizzando questo programma sul sito del mio professore in cui devo ritornare un booleano considerando un albero T: 1 (true) se l'altezza di T è pari al numero delle foglie di T;
0 (false) altrimenti. Inoltre 0 deve ritornare anche nel caso in cui l'latezza dell'albero sia pari a -1.
Qualcuno può aiutarmi?
Considerate che posso utilizzare solo la libreria #include <stdlib.h> e non vi è nessun modo per modificare il codice scritto nel main dal mio professore e nemmeno la possibilità di visualizzarlo.
Grazie in anticipo




Il linker mi da questo errore, ma non riesco a capire a cosa si riferisca:
__tester__.c: In function 'albero_altezza_foglie':
__tester__.c:57:6: error: expected expression before 'albero'
57 | if (albero==Numero_Foglie) {
|



#include <stdlib.h> /* ora puoi usare NULL */

/* scrivi qui la definizione del tipo "nodo"_(typedef) di un
albero binario che coincide con una struttura con tre campi:
un campo "info" di tipo intero, un campo "sx" (il puntatore al
sottoalbero sinistro), un campo "dx" (un puntatore al sottoalbero
destro). */
typedef struct nodo {
int info;
struct nodo* sx;
struct nodo* dx;
}nodo;

/* scrivi qui la definizione del tipo "albero" (typedef) che
rappresenta un puntatore al tipo "nodo" */
typedef nodo*albero;

/* scrivi qui eventuali funzioni di appoggio */
int cammino_ricorsivo (nodo *n){
if (n==NULL)
return 1;

if ((n->sx !=NULL) && (n->dx !=NULL)){
return 0;
}
return cammino_ricorsivo(n->sx) && cammino_ricorsivo(n->dx);
}
int Numero_Foglie(nodo *n){
int cont=0;
if ((n->dx !=NULL) && (n->sx !=NULL))
cont++;

return cont;
}
/* INIZIO FUNZIONE */

int albero_altezza_foglie(albero T){
int risultato;
/* Considera un albero binario T di interi.
La funzione albero_altezza_foglie deve ritornare un booleano:
1 (true) se l'altezza di T è pari al numero di foglie di T,
0 (false) altrimenti.
Si ricorda che in un albero binario vuoto l'altezza e' pari
a -1 mentre il numero di foglie e' pari a 0; quindi se T e'
vuoto allora la funzione albero_altezza_foglie deve ritornare 0. */
if (T==NULL)
risultato=0;

if (albero==Numero_Foglie) {
risultato=1;
}
else
{
risultato=0;
}
return risultato;
}

5 Risposte

  • Re: Compara altezza e numero foglie

    Usa i tag code (pulsante < / >)

    Hai studiato adeguatamente prima di affrontare gli esercizi? Puoi chiamare mai la funzione int Numero_Foglie(nodo *n) in quel modo? Cosa dovrebbe dirti il compilatore?
  • Re: Compara altezza e numero foglie

    if (albero==numero_foglie) 
    Stai confrontando il nome di un tipo con una variabile.
  • Re: Compara altezza e numero foglie

    Grazie ragazzi,
    Non ero concentrato ed ho commesso degli errori insensati e stupidi che non faccio mai. Posto il codice corretto perchè ritengo che possa tornare utile a qualcuno in futuro

    #include <stdlib.h> /* ora puoi usare NULL */

    /* scrivi qui la definizione del tipo "nodo"_(typedef) di un
    albero binario che coincide con una struttura con tre campi:
    un campo "info" di tipo intero, un campo "sx" (il puntatore al
    sottoalbero sinistro), un campo "dx" (un puntatore al sottoalbero
    destro). */
    typedef struct nodo {
    int info;
    struct nodo* sx;
    struct nodo* dx;
    }nodo;

    /* scrivi qui la definizione del tipo "albero" (typedef) che
    rappresenta un puntatore al tipo "nodo" */
    typedef nodo*albero;

    /* scrivi qui eventuali funzioni di appoggio */
    int altezza (nodo* n){
    if (n==NULL) return -1;
    int sx=altezza(n->sx);
    int dx=altezza(n->dx);
    if(sx>dx){
    return sx+1;
    }
    return dx+1;
    }

    int Numero_Foglie(nodo *n){
    if (n==NULL) {return 0;}

    if ((n->sx==NULL) && (n->dx==NULL)){
    return 1;
    }
    return Numero_Foglie(n->sx)+Numero_Foglie(n->dx);
    }

    /* INIZIO FUNZIONE */

    int albero_altezza_foglie(albero T){
    if (T==NULL) return 0;
    int a=altezza(T);
    int f=Numero_Foglie(T);
    /* Considera un albero binario T di interi.
    La funzione albero_altezza_foglie deve ritornare un booleano:
    1 (true) se l'altezza di T è pari al numero di foglie di T,
    0 (false) altrimenti.
    Si ricorda che in un albero binario vuoto l'altezza e' pari
    a -1 mentre il numero di foglie e' pari a 0; quindi se T e'
    vuoto allora la funzione albero_altezza_foglie deve ritornare 0. */

    if (a==f){return 1;}
    if (T!=NULL && T->dx!=NULL){
    return 1;}
    if (altezza!=Numero_Foglie){
    return 0;
    }
    }


    Grazie ancora
  • Re: Compara altezza e numero foglie

    Grazie ragazzi,
    Non ero concentrato ed ho commesso degli errori insensati e stupidi che non faccio mai. Posto il codice corretto perchè ritengo che possa tornare utile a qualcuno in futuro

    #include <stdlib.h> /* ora puoi usare NULL */

    /* scrivi qui la definizione del tipo "nodo"_(typedef) di un
    albero binario che coincide con una struttura con tre campi:
    un campo "info" di tipo intero, un campo "sx" (il puntatore al
    sottoalbero sinistro), un campo "dx" (un puntatore al sottoalbero
    destro). */
    typedef struct nodo {
    int info;
    struct nodo* sx;
    struct nodo* dx;
    }nodo;

    /* scrivi qui la definizione del tipo "albero" (typedef) che
    rappresenta un puntatore al tipo "nodo" */
    typedef nodo*albero;

    /* scrivi qui eventuali funzioni di appoggio */
    int altezza (nodo* n){
    if (n==NULL) return -1;
    int sx=altezza(n->sx);
    int dx=altezza(n->dx);
    if(sx>dx){
    return sx+1;
    }
    return dx+1;
    }

    int Numero_Foglie(nodo *n){
    if (n==NULL) {return 0;}

    if ((n->sx==NULL) && (n->dx==NULL)){
    return 1;
    }
    return Numero_Foglie(n->sx)+Numero_Foglie(n->dx);
    }

    /* INIZIO FUNZIONE */

    int albero_altezza_foglie(albero T){
    if (T==NULL) return 0;
    int a=altezza(T);
    int f=Numero_Foglie(T);
    /* Considera un albero binario T di interi.
    La funzione albero_altezza_foglie deve ritornare un booleano:
    1 (true) se l'altezza di T è pari al numero di foglie di T,
    0 (false) altrimenti.
    Si ricorda che in un albero binario vuoto l'altezza e' pari
    a -1 mentre il numero di foglie e' pari a 0; quindi se T e'
    vuoto allora la funzione albero_altezza_foglie deve ritornare 0. */

    if (a==f){return 1;}
    if (T!=NULL && T->dx!=NULL){
    return 1;}
    if (altezza!=Numero_Foglie){
    return 0;
    }
    }


    Grazie
  • Re: Compara altezza e numero foglie

    @edoardo2424

    il tag code è un tastino che si trova sopra la finestra dell'input testo, è visualizzato quando entri in [Editor completo & Anteprima] e ha questo aspetto: [</>]

    con il tag code il tuo codice viene visualizzato così come è, e non vengono introdotti errori dovuti a sequenze di caratteri contenuti nel codice che possono essere interpretati come codici di formattazione.
    
    #include <stdlib.h> /* ora puoi usare NULL */
    
    /* scrivi qui la definizione del tipo "nodo"_(typedef) di un
    albero binario che coincide con una struttura con tre campi:
    un campo "info" di tipo intero, un campo "sx" (il puntatore al
    sottoalbero sinistro), un campo "dx" (un puntatore al sottoalbero
    destro). */
    typedef struct nodo {
        int info;
        struct nodo* sx;
        struct nodo* dx;
    }nodo;
    
    /* scrivi qui la definizione del tipo "albero" (typedef) che
    rappresenta un puntatore al tipo "nodo" */
    typedef nodo*albero;
    
    /* scrivi qui eventuali funzioni di appoggio */
    int altezza (nodo* n){
        if (n==NULL) return -1;
        int sx=altezza(n->sx);
        int dx=altezza(n->dx);
        if(sx>dx){
            return sx+1;
        }
    return dx+1;
    }
    
    int Numero_Foglie(nodo *n){
        if (n==NULL) {return 0;}
    
        if ((n->sx==NULL) && (n->dx==NULL)){
            return 1;
        }
        return Numero_Foglie(n->sx)+Numero_Foglie(n->dx);
    }
    
    /* INIZIO FUNZIONE */
    
    int albero_altezza_foglie(albero T){
        if (T==NULL) return 0;
        int a=altezza(T);
        int f=Numero_Foglie(T);
        /* Considera un albero binario T di interi.
        La funzione albero_altezza_foglie deve ritornare un booleano:
        1 (true) se l'altezza di T è pari al numero di foglie di T,
        0 (false) altrimenti.
        Si ricorda che in un albero binario vuoto l'altezza e' pari
        a -1 mentre il numero di foglie e' pari a 0; quindi se T e'
        vuoto allora la funzione albero_altezza_foglie deve ritornare 0. */
    
        if (a==f){return 1;}
        if (T!=NULL && T->dx!=NULL){
            return 1;}
        if (altezza!=Numero_Foglie){
            return 0;
        }
    }
    
Devi accedere o registrarti per scrivere nel forum
5 risposte