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