Devo scrivere una funzione di stampa dei valori contenuti nei nodi nel cammino dalla radice ad un nodo contenente un valore i in un BST(Binary search tree)
Ho scritto questa funzione che effettivamente funziona:
Il mio dubbio è che prima di arrivare a questo algoritmo, scrivevo lo stesso algoritmo omettendo il return, quindi mi veniva stampato il valore cercato 2 volte, una volta dal primo if(b->Atomo==i), la seconda volta in quanto la funzione ricorsiva torna indietro di un passo ma b punta ancora al valore quindi viene ristampato dal secondo printf(). Quindi mi è venuto in mente di mettere questo return che non torna niente(in quanto a volte l'ho visto), però sinceramente non ho capito come un return possa non tornare alcun valore e come mai con il return è come se la funzione ricorsiva facesse due passi all'indietro e quindi l'ultimo valore cercato viene stampato una sola volta..
Ho scritto questa funzione che effettivamente funziona:
Codice:
typedef struct TNodo {
int Atomo;
struct TNodo *left;
struct TNodo *right;
} Nodo;
typedef Nodo* Bst;
void print(Bst b,int i) {
if(b!=NULL) {
if(b->Atomo == i) {
printf("%d\n",b->Atomo);
return;
}
else {
if(i<b->Atomo)
print(b->left,i);
else
print(b->right,i);
}
}
printf("%d\n",b->Atomo);
}
Il mio dubbio è che prima di arrivare a questo algoritmo, scrivevo lo stesso algoritmo omettendo il return, quindi mi veniva stampato il valore cercato 2 volte, una volta dal primo if(b->Atomo==i), la seconda volta in quanto la funzione ricorsiva torna indietro di un passo ma b punta ancora al valore quindi viene ristampato dal secondo printf(). Quindi mi è venuto in mente di mettere questo return che non torna niente(in quanto a volte l'ho visto), però sinceramente non ho capito come un return possa non tornare alcun valore e come mai con il return è come se la funzione ricorsiva facesse due passi all'indietro e quindi l'ultimo valore cercato viene stampato una sola volta..