Ciao provo a darti una mano.

Non ricordo bene il C , per cui ti posto una sorta di pseudocodice per il Preordine:

codice:
void treePreorder(root) {
   if(root == null) return;

   <visita root>
   r = root.firstChild;  
    while(r != null) {
     treePreorder(r);
     r = r.nextSibling;
   }
}
Naturalmente r è di tipo Nodo .
Non dovresti avere problemi a tradurla in C.
Come vedi è una funzione ricorsiva, la logica non è difficile. Ti consiglio di disegnarti la stuttura dati per avere un'idea più chiara del funzionamento.

Per le altre due visite (InOrder e PostOrder).. la logica è la stessa.... e possono essere un buon esercizio per capire meglio la struttura.

Spero di esserti stato di aiuto

Ciao