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