ho modificato la funzione cerca.. se non altro ho fatto passi avanti.. infatti ora la funzione riesce a scandire tutti i nodi dell'albero e trova anche quelli che deve trovare.. solo che alla fine, dopo aver visitato l'ultimo nodo va in seg default.. uff!!


codice:
struct node *cerca2(struct node *root,struct node *elemento,list *nodi_trovati){
// cerca il nodo elemento nell'albero radicato in root
	if (root == NULL) return NULL;
	printf("stiamo cercando il nodo %s nell'albero %s\n",elemento->name,root->name);
	if (strcmp(root->name,elemento->name) == 0) {	// controlla radice
		printf("trovato\n");
		int a = add_last(nodi_trovati,root);
		return root;
	} else { 
		if (root->children != NULL) {
			iterator i = get_iterator(root->children);
			while (has_next(i)) { 
				struct node *temp = (struct node *)next(i);
				temp = cerca2(temp,elemento,nodi_trovati);
			}
		} else return NULL;
	}	
}
ps: ho aggiunto alla funzione una lista, con lo scopo di salvare piu nodi se ne trova piu di uno uguale a quello cercato.