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
vi inserisco anche le strutture albero e listacodice://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; }
un grazie a chi mi da una rispostacodice: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; };
ciao davide

Rispondi quotando