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:
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.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; }
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![]()