[Algo] Esercizio su un albero binario
Dato un albero binario, la lunghezza del cammino interno è la somma dei livelli dei suoi nodi interni. Un nodo inteno è un un nodo che ha almeno un figlio.
Scrivere un algoritmo per calcolare la lunghezza del cammino interno.
La prima chiamata sarà:
Secondo voi va bene?
Avreste qualche altra soluzione da proporre??
Ciao e buona serata
Scrivere un algoritmo per calcolare la lunghezza del cammino interno.
f(T,l) if T==NULL return 0 if T.left != NULL or T.right != NULL return l + f(T.left, l++) + f(T.right, l++)
La prima chiamata sarà:
f(root,0)
Secondo voi va bene?
Avreste qualche altra soluzione da proporre??
Ciao e buona serata

Risposte
Per prima cosa ti direi di evitare di usare la L minuscola come variabile: la prima volta che ho guardato il codice velocemente pensavo fosse un uno. In effetti ad una seconda occhiata mi sembra corretto. Sinceramente mi vengono in mente solo versioni modificate (eventualmente iterative) della soluzione da te adottata. Se vuoi posso scrivertele, ma probabilmente la tua versione è la più semplice. Soprattutto se non si richiedono ulteriori condizioni sulla struttura dell'albero.
Ho sbagliato la condizione:
Così facendo se ci troviamo in un nodo foglia, farà un return alla procedura chiamante senza alcun valore di ritorno.
Quindi la versione corretta è:
Se ti va potresti scrivermela, è comunque divertente ed un buon allenamento vedere anche altre soluzioni
if T.left != NULL or T.right != NULL
Così facendo se ci troviamo in un nodo foglia, farà un return alla procedura chiamante senza alcun valore di ritorno.
Quindi la versione corretta è:
f(T,liv) if T==NULL return 0 if T.left == NULL and T.right == NULL return 0 return liv + f(T.left, liv++) + f(T.right, liv++)
Se ti va potresti scrivermela, è comunque divertente ed un buon allenamento vedere anche altre soluzioni
