ciao a tutti, devo fare una funzione che dato un nodo qualsiasi di un albero, crea una lista ordinata di tutti i nodi del sottoalbero sinistro oppure destro, a seconda della specifica data in “direzione” (convenzione: 'p' = sx quindi sx, 's' = dx).
Ho provato a fare una vista inorder dell'albero memorizzando i nodi in testa alla lista, però salta qualche nodo che è correttamente nell'albero

codice:
//fa la vista inorder dell'albero e inserisce i nodi nella lista
lista_elem *ins_testa(nodo_albero nodo, lista_elem *next) {
    lista_elem *temp;
    temp = (lista_elem*) malloc(sizeof(lista_elem));
    if (nodo.sx) temp = ins_testa(*nodo.sx, next);
    temp->cod = nodo.cod;
    temp->ora = nodo.ora;
    temp->next = next;
    next = temp;
    if (nodo.dx) temp = ins_testa(*nodo.dx, next);
    return temp;      
}

//funzione principale che inserisce il nodo passato per argomento nella lista e poi in
//base alla direzione chiama la funzione ins_testa passandogli il nodo sx o dx
lista_elem *crea_lista(nodo_albero nodo, char direzione) {
    nodo_albero *n = &nodo;
    if (n == NULL) return NULL;
    lista_elem *L;
    L = (lista_elem*) malloc(sizeof(lista_elem));
    L->cod = nodo.cod;
    L->ora = nodo.ora;
    L->next = NULL;
    if (nodo.sx && direzione == 'p') {
        L = ins_testa(*nodo.sx,L);
    }
    if (nodo.dx && direzione == 's') {
        L = ins_testa(*nodo.dx,L);
    }
    return L;
}
vi inserisco anche le strutture albero e lista
codice:
typedef struct nodo nodo_albero;
struct nodo {
    int cod;
    int ora;
    nodo_albero *sx;
    nodo_albero *dx;
    nodo_albero *padre;
};

typedef struct elem lista_elem;
struct elem {
    int cod;
    int ora;
    lista_elem *next;
};
un grazie a chi mi da una risposta

ciao davide