C' è su wikipedia (leggi l' articolo), comunque ti faccio un esempio:
codice:
void dfs(struct tnode* p,int v[])
{
    static int i=0;
    if(p!=NULL)
    {
        v[i++]=p->count;
        dfs(p->right,v);
        dfs(p->left,v);
    }
}
Parametri: N numeri degli elementi del grafo, i indice del prossimo nodo da inserire.E' ricorsiva ma si potrebbe anche fare con una pila.
Il grafo è un albero per cui ogni nodo viene visitato una volta.
Ora hai l' array disordinato, e hai chiamato N volte la procedura per ottenere tutti i valori dell' array.
Rimane solo da ordinarlo, se usi il qsort di stdlib.h in totale spendi n+nlogn.