Devo realizzare un metodo int contaric(Bntree T, int x), che dato un albero di grado arbitrario T e un intero x conta quanti nodi in T hanno esattamente x figli (diretti discendenti).
Io avevo pensato che dato che ogni figlio è collegato al proprio fratello, di creare una lista per ogni figlio quindi poi contare il numero di elementi che conteneva la lista, però ho un problema quando vado a compilare...
Ecco quello che sono riuscito ad implementare
File header:
Io avevo pensato che dato che ogni figlio è collegato al proprio fratello, di creare una lista per ogni figlio quindi poi contare il numero di elementi che conteneva la lista, però ho un problema quando vado a compilare...
Ecco quello che sono riuscito ad implementare
File header:
Codice:
#ifndef GENEALOGIA_H
#define GENEALOGIA_H
typedef char stringa[20];
typedef struct elem3 {
stringa info;
struct elem3* next;
} elist;
typedef struct elem2 {
stringa info;
struct elem2* primofiglio;
struct elem2* fratello;
} nodo_alberoN;
typedef nodo_alberoN* Bntree;
typedef elist* plist;
int contaric(Bntree,int);
plist crealista(Bntree);
int contaelem(plist);
#endif
Codice:
#include"genealogia.h"
#include<string.h>
#include<stdlib.h>
int contaric(Bntree t, int x) {
plist a = (plist)malloc(sizeof(elist));
int count=0;
if (t!=NULL) {
contaric(t->primofiglio,x);
contaric(t->fratello,x);
a = crealista(t);
if (contaelem(a) == x)
count++;
}
return count;
}
int contaelem(plist a) {
int count = 0;
while (a!=NULL) {
count++;
a = a->next;
}
return count;
}
plist crealista(Bntree t) {
plist a = (plist)malloc(sizeof(elist));
plist temp = a;
strcpy(temp->info,t->info);
t->fratello;
while (t!=NULL) {
temp->next = (plist)malloc(sizeof(elist));
temp = temp->next;
strcpy(temp->info,t->info);
t->fratello;
}
return a;
}