Salve a tutti,
ho progettato un algoritmo ricorsivo per alberi binari che, dato un nodo dice quanto è lungo il cammino più lungo. Se ovviamente dai la radice ti da la profondità massima dell'albero.

Le sottofunzioni utilizzate credo che si capiscano abbastanza:

empty(): Controlla che l'albero non sia vuoto;
dx_empty(n): Dato un nodo controlla che abbia un figlio destro;
sx_empty(n): Dato un nodo controlla che abbia un figlio sinistro;

Il codice è il seguente:

codice:
template <class T,class N>
int Bin_tree<T,N>::maxProfondita(Bin_tree<T,N>::Nodo n)
{
	int c = 0, max = 0;
	if(!empty() && sx_empty(n) && dx_empty(n))
		return 0;
	else
		if(!empty())
			   {
				   if(!sx_empty(n))
				   {
						if((c = maxProfondita(sx(n))) > max)
							max = c;
				   }

				   if(!dx_empty(n))
				   {
						if((c = maxProfondita(dx(n))) > max)
							max = c;
				   }
				   if(!dx_empty(n) || !sx_empty(n))
					   return max+1;
			   }
		else return 0;
}
L'ho provato con varie configurazioni e "pare" funzionare, ma volevo averne la totale sicurezza, quindi magari se vi va di dargli un occhiata e dirmi se "la logica secondo il quale funziona" è giusta o è errata, o magari si potrebbe migliorare, ve ne sarei grato.

Del resto data la mia scarsa preparazione riguardo agli algoritmi ricorsivi volevo chiedervi se avete da consigliare qualche libro, how-to, slide o quel che sia che possa proporre qualche metodo e qualche esercizio per imparare bene a progettare algoritmi ricorsivi