[Algo] Esercizio su un albero binario

Pablitos23
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.


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 :-D

Risposte
apatriarca
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.

Pablitos23
Ho sbagliato la condizione:
   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 :D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.