PDA

Visualizza la versione completa : [C] Alberi binari: l'inserimento non avviene correttamente


aulin88
15-10-2008, 13:02
Ciao a tutti, sto preparando un esame e ieri provavo ad esercitarmi sugli alberi binari, ho pensato di fare un semplice programmino che richiede l'input di numeri che vengono inseriti in ordine nell'albero binario, cn gli elementi minori o uguali a sinistra e a destra quelli maggiori, e che permetta la visita in-order dell'albero. putroppo non mi funziona bene, e non riesco a capire perche, le funzioni sono tutte ricorsive, e nella funzione di collegamento dei nodi, se notate ho messo la stampa di una lettera "s" se sinistra e "d" se destra, ho fatto cio x vedere quante volte la funzione ricorsiva richimava se stessa, sia per mettere a sinistra che a destra, e ho notato che gli elementi che dovrebbe inserire ad esempio ad un secondo livello dell'albero, li inserisce sempre al primo, visto che la stampa delle lettere me la fa sempre una volta e non due, quindi sono arrivato alla conclusione che ilmproblema sia li, vi metto il link del codice.. spero possiate aiutarmi ,un ciao e un grazie a tutti!

http://www.zshare.net/download/2057801540fc0c0e/

LeleFT
15-10-2008, 13:43
Alcune cose da tenere presente:

1) Leggere il regolamento prima di postare
2) Il titolo non conforme al regolamento
3) Va bene linkare il codice se questo troppo lungo, ma almeno posta la parte che ritieni sbagliata.

Questa discussione la correggo io.


Ciao. :ciauz:

aulin88
15-10-2008, 14:44
chiedo scusa, la mancata correttezza del messaggio; riguardo alla parte che ritengo errata, il problema e che non so quale sia visto che non mi da un errore di sintassi e cose simili, il compilatore lo compila, il programma parte ma non funziona correttamente!

aulin88
16-10-2008, 18:23
Vedo che qui non mi ha saputo aiutare nessuno, in ogni caso sono riuscito a trovare la soluzione, se a qualcuno puo interessare eccovi il codice della funzione di annodamento nell'albero!!

dati * annoda(dati *radice,dati *elem)
{

if(radice==NULL)
{
printf(" numero inserito!\n");
return elem;
}
else
{
if((elem->num)<=(radice->num))
{
printf("\ns");
radice->sinistra=annoda(radice->sinistra,elem);
return radice; }
else
{
printf("\nd");
radice->destra=annoda(radice->destra,elem);
return radice; }
}

}

Loading