ABR
On utilise dans tous les exercices l'implémentation des arbres binaires à l'aide d'une classe ArbreBinaire
. On pourra utiliser sans justification supplémentaires les méthodes gauche
, droit
, etiquette
, est_vide
de la classe ArbreBinaire
, ainsi que la méthode inserer
de la classe ABR
.
1 |
|
Question de cours¶
L'arbre binaire \(\mathcal{A}\) ci-dessous est-il un arbre binaire de recherche ? Justifier votre réponse à l'aide de deux arguments différents.
Le sous-arbre droit de \(\mathcal{A}\) n'est pas un arbre binaire de recherche. Il y a une étiquette d'un nœud du sous-arbre gauche de \(\mathcal{A}\) qui est supérieur à l'étiquette de la racine.
Tranche d'un ABR¶
-
Écrire une fonction
parcours_stocke_cles_entre
qui prend en argument un ABRa
, une listel
ainsi que deux entiersvmin
etvmax
et qui ajoute à la listel
les élémentse
dea
compris strictement entrevmin
etvmax
.On effectuera un parcours en profondeur infixe de l'arbre
a
.1 2 3 4 5 6 7 8
def parcours_stocke_cles_entre(a, l, vmin, vmax): if a.est_vide(): pass else: parcours_stocke_cles_entre(a.gauche(), l, vmin, vmax) if vmin < a.etiquette() < vmax: l.append(a.etiquette()) parcours_stocke_cles_entre(a.droit(), l, vmin, vmax)
-
Quel affichage produit le code suivant ?
1 2 3 4 5 6
a = ABR() for e in [5, 7, 3, 4, 1, 2, 8, 4, 9]: a.inserer(e) l = [] print(parcours_stocke_cles_entre(a, l, 3, 6)) print(l)
None [4, 4, 5]
La ligne 6 affiche
None
, la ligne 7 affiche[4, 4, 5]
. -
On exécute à nouveau les deux dernières lignes du code précédent. Quel est l'affichage alors réalisé ?
L'avant dernière ligne affiche
None
, la dernière ligne affiche[4, 4, 5, 4, 4, 5]
Arbre d'appel¶
On donne ci-dessous le code d'une fonction python m
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
1 2 3 4 |
|
[$1$ [,phantom] [$9$ [$5$ [$4$ [$3$ [,phantom] [,phantom]] [,phantom]] [$6$ [,phantom] [$8$ [,phantom] [,phantom]]]] [$12$ [,phantom] [$42$ [,phantom] [,phantom]]]]]
Dresser l’arbre d’appel de l’instruction m(A, 8)
où l’arbre \(\mathcal{A}\) est
l’arbre dont on a donné la représentation ci-dessous. En déduire la
valeur renvoyée par m(A, 8)
.
m(A, 8) |
1 |
|
9