Hai pienamente ragione, scara e allora com'è possibile che io di ritorno al sottoprogramnma che chiama questa funzione mi ritrovo con root che punta non più alla radice ma un altro indirizzo. Infattis e provo ad eseguire due volte consecutive la stampa, la prima va bene e la seconda mi da segmentation fault.
codice:void stampa_vet_abr(tree **vet_abr,funzioni *funz){ int i,scelta; tree *root; system("cls"); printf("\n\n Che tipo di visita vuoi effettuare per la stampa ?"); printf("\n (1) Pre-Order"); printf("\n (2) Post-Order"); printf("\n\n Tasto digitato : "); scanf("%d",&scelta); getchar(); for(i=0;i<15;i++){ if(vet_abr[i]!=NULL){ root=vet_abr[i]; printf("\n Albero %d ",i); stampa_abr(root,funz,scelta); } } } void stampa_abr(tree *root,funzioni *funz,int scelta){ printf("\n\n"); if(scelta==1) print_abr_pre(root,funz); else if(scelta==2) print_abr_post(root,funz); else printf(" La scelta effettuata non è prevista "); printf("\n\n"); } void print_abr_pre(tree *root,funzioni *funz){ stack *st=NULL; tree *curr=root; while((st) || (curr)){ if(curr){ funz->output(curr->inf); st=push(st,curr); curr=curr->sx; } else{ curr=top(st); st=pop(st); curr=curr->dx; } } }

Rispondi quotando