taille récursive d'un arbre binaire (1)

Dans cet exercice, un arbre binaire de caractères est stocké sous la forme d’un dictionnaire où les clefs sont les caractères des nœuds de l’arbre et les valeurs, pour chaque clef, la liste des caractères des fils gauche et droit du nœud.

On utilise la valeur '' pour représenter un fils vide.

Par exemple, l’arbre

image

est stocké dans

🐍 Script Python
a = {'F':['B','G'], 'B':['A','D'], 'A':['',''], 'D':['C','E'], \
'C':['',''], 'E':['',''], 'G':['','I'], 'I':['','H'], \
'H':['','']}

Écrire une fonction récursive taille prenant en paramètres un arbre binaire arbre non vide représenté par un dictionnaire comme vu ci-dessus et un caractère lettre. La fonction doit renvoyer la taille de l'arbre, ou du sous arbre de arbre de sommet lettre.

On observe que, par exemple, arbre[lettre][0], respectivement arbre[lettre][1], permet d’atteindre la clé du sous-arbre gauche, respectivement droit, de l’arbre arbre de sommet lettre.

Exemple

🐍 Console Python
>>> taille(a, 'F')
9
>>> taille(a, 'B')
5
>>> taille(a, 'I')
2
Compléter le code ci-dessous

###
# Testsbksl-nlbksl-nla = {'F':['B','G'], 'B':['A','D'], 'A':['',''], 'D':['C','E'], bksl-nl'C':['',''], 'E':['',''], 'G':['','I'], 'I':['','H'], 'H':['','']}bksl-nlbksl-nlassert taille(a, 'F') == 9bksl-nlassert taille(a, 'B') == 5bksl-nlassert taille(a, 'I') == 2bksl-nlbksl-nl# Autres testsbksl-nlbksl-nlassert taille(a, 'E') == 1bksl-nlassert taille(a, 'G') == 3bksl-nlbksl-nl 5/5
def taille(arbre, lettre):bksl-nl ...bksl-nlbksl-nl# Testsbksl-nlbksl-nla = {'F':['B','G'], 'B':['A','D'], 'A':['',''], 'D':['C','E'], bksl-nl'C':['',''], 'E':['',''], 'G':['','I'], 'I':['','H'], 'H':['','']}bksl-nlbksl-nlassert taille(a, 'F') == 9bksl-nlassert taille(a, 'B') == 5bksl-nlassert taille(a, 'I') == 2bksl-nlbksl-nlbksl-nldef taille(arbre, lettre):bksl-nl if lettre == '':bksl-nl return 0bksl-nl return 1 + taille(arbre, arbre[lettre][0]) + taille(arbre, arbre[lettre][1])bksl-nlbksl-nlbksl-nl