Ho provato a fare quest'esercizio in cui si dovrebbe a trascrivere da file di testo, presente nella cartella del progetto, su un albero binario di ricerca ma quando compila mi da errore e mi da un messaggio con scritto "stack Overflow". Penso che il problema sia nella funzione "empty" ma non riesco proprio a capire come risolvere il problema, sembra proprio che non riesca a scrivere sull'albero binario..
qualcuno mi può aiutare?
codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct it{
char nome[30];
struct it*left;
struct it*right;
}item;
typedef item*tree;
//typedef enum {falso, vero} boolean;
typedef int boolean;
boolean empty(item t){
return (t==NULL);
}
tree left(tree t){
if(empty(t)==1)
return NULL;
else return t->left;
}
tree right(tree t){
if(empty(t))
return NULL;
else return t->right;
}
tree ConsTree(char c[],tree l, tree r){
tree t=(item*)malloc(sizeof(item));
strcpy(t->nome,c);
t->left=l;
t->right=r;
return t;
}
tree emptytree(void){
return NULL;
}
tree InsBinOrd(char c[],tree t){
if(empty(t))
return ConsTree(c,emptytree(),emptytree());
else
if(strcmp(c,t->nome)<=0)
return ConsTree(t->nome,InsBinOrd(c,t->left),t->right);
else return ConsTree(t->nome,t->left,InsBinOrd(c,t->right));
}
void InOrder(tree t){
if(empty(t)){
InOrder(left(t));
printf("%s\n", t->nome);
InOrder(right(t));
}
}
void main(){
FILE*write;
FILE*read;
int continua=1;
char parola[11];
tree t=NULL;
int i=0;
char v[11][11];
int n;
/*write=fopen("write.txt","w");
if(write==NULL){
printf("errore aperuta file\n");
exit(1);
}
do{
printf("inserire nome\n");
gets(parola);
fprintf(write,"%s\n",parola);
printf("Vuoi continuare?\n");
scanf("%d",&continua);
getchar();
}while(continua);
printf("fatto\n");
fclose(write);*/
read=fopen("write - Copia.txt","r");
if(read==NULL){
printf("errore apertura file\n");
exit(1);
}
while(fscanf(read,"%s\n",parola)>0){
printf("%s\n",parola);
InsBinOrd(parola,t);
strcpy(v[i],parola);
i++;
}
printf("fatto\n");
fclose(read);
for(n=0;n<i;n++){
printf("%s\n", v[n]);
}
printf("\n\n");
InOrder(t);
fflush(stdin);
getchar();
}