Un consiglio riguardo gli Alberi Binari

di il
3 risposte

Un consiglio riguardo gli Alberi Binari

Ciao ragazzi, mi trovo a dover svolgere degli esercizi di programmazione in C per un esame di Informatica che dovrò sostenere; questo esercizio richiedeva che dopo la creazione di un albero binario si scrivesse una funzione che fosse in grado di stampare solo le cifre pari memorizzate nei nodi e di contarne la quantità: il programma che ho scritto riesce nel primo intento ma non nel secondo (sembra ignorare del tutto l'istruzione sum++;), potete aiutarmi a capire dove sbaglio? grazie

[
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>

struct node
{
int data;
struct node *left;
struct node *right;
};

struct node* newNode(int data)
{
struct node* node=(struct node*)malloc(sizeof(struct node));
node->data=data;
node->left=NULL;
node->right=NULL;
return(node);
}TREE;

int SumEven(struct node *ptr1) //visita ricorsiva per cercare tutti i numeri pari
{
int sum=0;
if(ptr1!=NULL)
{
SumEven(ptr1->left);
if((ptr1->data)%2==0)
{
printf("%d\n", ptr1->data);
sum++;
}
SumEven(ptr1->right);
}

return sum;
}

struct node* newNode(int data);
int SumEven(struct node *ptr1);

int main(void)
{
struct node *root=newNode(1);
root->left=newNode(3);
root->right=newNode(2);
root->left->left=newNode(4);
struct node *ptr=&TREE;

int sum;
printf("il numero di nodi contenenti cifre pari e': %d\n", sum=SumEven(root));

return 0;
}
]
[/code]

3 Risposte

  • Re: Un consiglio riguardo gli Alberi Binari

    Ciao
    allora l'errore stà nella variabile sum perche la definisci all' interno della funzione.
    cosi ad ogni richiamo della funzione la variabile viene reinizializzata a 0 cosi quando chiami la funzione con l'ultimo link dell'alberosum vale 0 e quindi te lo restituisce.
    io ti consiglio di fare la funzione nel seguente modo:
    void SumEven(struct node *ptr1,int &sum)
    {
    if(ptr1!=NULL)
    {
    if((ptr1->data)%2==0) { printf("%d\n", ptr1->data); sum++; }
    SumEven(ptr1->left,sum);
    SumEven(ptr1->right,sum);
    }
    }
     
    di conseguenza quando chiamerai la funzione, nel main, lo farai nel seguente modo:
    int sum=0;
    SumEven(root,sum);
    printf("il numero di nodi contenenti cifre pari e': %d\n", sum);
    return 0;
    
  • Re: Un consiglio riguardo gli Alberi Binari

    smalldragon ha scritto:


    Ciao
    allora l'errore stà nella variabile sum perche la definisci all' interno della funzione.
    cosi ad ogni richiamo della funzione la variabile viene reinizializzata a 0 cosi quando chiami la funzione con l'ultimo link dell'alberosum vale 0 e quindi te lo restituisce.
    io ti consiglio di fare la funzione nel seguente modo:
    void SumEven(struct node *ptr1,int &sum)
    {
    if(ptr1!=NULL)
    {
    if((ptr1->data)%2==0) { printf("%d\n", ptr1->data); sum++; }
    SumEven(ptr1->left,sum);
    SumEven(ptr1->right,sum);
    }
    }
     
    di conseguenza quando chiamerai la funzione, nel main, lo farai nel seguente modo:
    int sum=0;
    SumEven(root,sum);
    printf("il numero di nodi contenenti cifre pari e': %d\n", sum);
    return 0;
    
    Ciao, sei sicuro che quella funzione che hai scritto sia valida in C?
  • Re: Un consiglio riguardo gli Alberi Binari

    Ciao
    pultroppo non ho per le mani un compilatore c
    quindi non l'ho potuta testare
    ma dovrebbe funzionare correttamente
    se c'è qualche problema dimmelo cosi lo posso risolvere.
Devi accedere o registrarti per scrivere nel forum
3 risposte