Dubbio esercizio di ricorsione dell'Eserciziario Python

kevincukaj (660 points)
1 5 10
asked Dec 2, 2020 in Eserciziario d'esame by kevincukaj (660 points)
recategorized Dec 8, 2020 by andrea.sterbini

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? 

201 views
closed with note: Dubbio chiarito.

2 Answers

O
Oakandrew (6400 points)
4 26 63
answered Dec 2, 2020 by Oakandrew (6,400 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
answered Dec 2, 2020 by gusgus (1,730 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)
1 5 10
commented Dec 2, 2020 by kevincukaj (660 points)
Ora mi è più chiaro. Grazie