PDA

Visualizza la versione completa : [C++] alberi binari


maluz1
03-10-2013, 22:14
salve a tutti!:)

sto facendo qualche esercizio sugli alberi binari, creazione, stampa, e deallocazione dell'albero.
compilando nessun problema, ma al momento dell'esecuzione il programma, dopo l'inserimento dei dati, termina con 0 errori, non stampando però i valori dell'albero binario

la stamp del numero binario credo sia corretta e anche la deallocazione, ecco il codice:

funzione per creare nuovo nodo:



void crea_nuovo_nodo( albero* &start, int num ){
albero* temp_p= start;
albero* new_tree= new albero;


while( temp_p != NULL )
{
if ( rand() % 2== 0 )
temp_p= temp_p -> left;
else
temp_p= temp_p -> right;
}


new_tree -> info= num;
new_tree -> left= NULL;
new_tree -> right= NULL;
temp_p= new_tree;
}


sono consapevole che esiste anche la funzione ricorsiva, sicuramente migliore in termini di prestazioni rispetto a questa, ma ho preferito andare sul facile all'inizio( anche se in un certo senso sarebbe stato più facile la ricorsiva, diciamo che questa possibilità è più comprensiva )

main:


main()
{
albero* init= NULL;
int n;


srand( time( 0 ) );


for( int l= 1; l <= 10; l++ )
{
cout << "inserisci il " << l << " numero:" << endl;
cin >> n;


crea_nuovo_nodo( init, n );
}


stampa_albero( init );
cancella_lista( init );
}


l'algoritmo di stampa è corretto perchè uguale identico a quelli sul web...
non riesco a trovare il perchè..:(

grazie mille in anticipo!:)

lovesemiramide
04-10-2013, 17:54
Ci sono un paio di errori nella funziona crea_nuovo_nodo:



In caso la lista sia vuota non modifichi il puntatore alla radice(start) ma solo tmp_p causando la perdita dell'oggetto appena creato.
Poniamo il caso che il punto 1 sia già implementato nel codice e che sia funzionante. Sorge ora il problema di inserire tutti i vari nodi figli che, per come è attualmente il codice, non viene risolto correttamente, in quanto assegni sì a tmp_p il nodo creato ma lo fai quando tmp_p è uguale a NULL e cioè quando hai perso ogni riferimento all'albero.

maluz1
05-10-2013, 16:16
grazie mille per avermi aiutato a risolvere il problema! adesso ho capito come risolverli:)
ciao!:)

lovesemiramide
05-10-2013, 17:30
Felice di essere stato d'aiuto. :)

Loading