Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Dubbio esercizio di ricorsione dell'Eserciziario Python

kevincukaj (660 points)
2 6 10
in Eserciziario d'esame by (660 points)
recategorized by

L'esercizio chiede:

Dato un albero di tipo AlberoBinario, ritorna il numero di nodi che nell'albero hanno esattamente 2 figli.

             7
            /\
           1  3
          / \
       4    6
       /     /
     5     2
     /       \
   9         8

La funzione, in questo caso deve ritornare 2.

La soluzione fornita era la seguente:

    if tree == None:
        return 0
    count = es48(tree.sx) + es48(tree.dx)      <------------
    if tree.sx != None and tree.dx != None:
        count += 1
    return count

Qualcuno sarebbe gentile da spiegarmi la logica dietro alla terza riga? 

438 views
closed with the note: Dubbio chiarito.

2 Answers

O
Oakandrew (6400 points)
7 27 64
by (6.4k points)
Entra in due nodi successivi, dopodiche entra in 2 nodi successivi di ogni nodo successivo e cosi via fino al caso base, se non c'è il nodo destro oppure sinistro ti restituisce 0 e somma al risultato del nodo destro oppure sinistro del nodo precedente
gusgus (1730 points)
5 8 31
by (1.7k points)
Non capisco cosa tu non riesca a capire, ma in sostanza funziona così: la terza riga somma i punti che le vengono ritornati dalle chiamate, deve ovviamente chiamarne 2 perché ogni nodo ha potenzialmente 2 rami; tornerà 1+1 se entrambi i nodi successivi avranno 2 nodi a loro volta, 1+0 o 0+1 in caso soltanto uno dei due abbia a sua volta 2 nodi e 0+0 in caso nessuno dei due abbia 2 nodi a sua volta
kevincukaj (660 points)
2 6 10
by (660 points)
Ora mi è più chiaro. Grazie