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