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(); }

Rispondi quotando