dunque il principio secondo cui ho scritto quel codice è il seguente :

suppongo che ogni sottoalbero restituisce il proprio minimo, per cui tramite le chiamate ricorsive ottengo min_left e min_right (che vengono restituiti tramite i return)

Supponendo quindi di avere i minimi dei sottoalberi, il minimo dell'albero è dato dal valore piu piccolo tra il valore della radice e i minimi dei sottoalberi, per cui mi basta fare i confronti. se fate caso al codice, ho scritto :

min=T.info //Per prima cosa suppongo che la radice abbia il minimo
if (min_left<min) //Controllo che il minimo del sottoalbero sinistro sia minore della radice
min=min_left; //se è vero allora min_left è il nuovo minimo
if (min_right<min) //Controllo che il minimo del sottoalbero destro sia minore del minimo di prima
min=min_right; //se è vero allora min_right è il nuovo minimo
//Sei due controlli danno false entrambi allora il minimo è nella radice, quindi è gia in min
return min; //Ritorno il valore minimo trovato, che alle chiamate precedenti sarà assegnato a min_left o a min_right

Nel caso T sia NULL (cioè sono in una foglia) ritorno INT_MAX, che verrà assegnato a min_right o a min_left, per cui i controlli daranno sicuro un true.

Anche se min è una variabile locale, essa viene ritornata alle chiamate precedenti tramite il return, quindi il suo valore non è perduto, ma assegnato a min_left e min_right. Quello che dite voi è il motivo per cui faccio prima le chiamate ricorsive e poi i controlli, in modo tale da avere i valori aggiornati quando si comincia a far backtracking.


Scusate se mi sono dilungato, ma spero di essere stato chiaro. ciao ciao