Exercice 3 · Bac Numérique et Sciences Informatiques Métropole Candidat libre 2021 (sujet 2)
Thème : Arbres : vocabulaire, mesures et algorithmique · Tiré du sujet Métropole Candidat libre 2 (2021)
Énoncé
EXERCICE 3 (4 points)
Cet exercice porte sur les arbres binaires de recherche et la programmation orientée objet.
On rappelle qu'un arbre binaire est composé de nœuds, chacun des nœuds possédant éventuellement un sous-arbre gauche et éventuellement un sous-arbre droit. Un nœud sans sous-arbre est appelé feuille. La taille d'un arbre est le nombre de nœuds qu'il contient; sa hauteur est le nombre de nœuds du plus long chemin qui joint le nœud racine à l'une des feuilles. Ainsi la hauteur d'un arbre réduit à un nœud, c'est-à-dire la racine, est 1.
Dans un arbre binaire de recherche, chaque nœud contient une clé, ici un nombre entier, qui est:
strictement supérieure à toutes les clés des nœuds du sous-arbre gauche;
strictement inférieure à toutes les clés des nœuds du sous-arbre droit.
Ainsi les clés de cet arbre sont toutes distinctes.
Un arbre binaire de recherche est dit « bien construit » s'il n'existe pas d'arbre de hauteur inférieure qui pourrait contenir tous ses nœuds.
On considère l'arbre binaire de recherche ci-dessous.
1. a.
Quelle est la taille de l'arbre ci-dessus ?
1. b.
Quelle est la hauteur de l'arbre ci-dessus ?
2.
Cet arbre binaire de recherche n'est pas « bien construit ». Proposer un arbre binaire de recherche contenant les mêmes clés et dont la hauteur est plus petite que celle de l'arbre initial.
3.
Les classes Noeud et Arbre ci-dessous permettent de mettre en œuvre en Python la structure d'arbre binaire de recherche. La méthode insere permet d'insérer récursivement une nouvelle clé.
class Noeud:
def __init__ (self, cle):
self.cle = cle
self.gauche = None
self.droit = None
def insere(self, cle):
if cle < self.cle:
if self.gauche == None:
self.gauche = Noeud(cle)
else:
self.gauche.insere(cle)
elif cle > self.cle:
if self.droit == None:
self.droit = Noeud(cle)
else:
self.droit.insere(cle)
class Arbre:
def __init__ (self, cle):
self.racine = Noeud(cle)
def insere(self, cle):
self.racine.insere(cle)
Donner la représentation de l'arbre codé par les instructions ci-dessous.
a = Arbre(10)
a.insere(20)
a.insere(15)
a.insere(12)
a.insere(8)
a.insere(4)
a.insere(5)
4.
Pour calculer la hauteur d'un arbre non vide, on a écrit la méthode ci-dessous dans la classe Noeud.
def hauteur(self):
if self.gauche == None and self.droit == None:
return 1
if self.gauche == None:
return 1+self.droit.hauteur()
elif self.droit == None:
return 1+self.gauche.hauteur()
else:
hg = self.gauche.hauteur()
hd = self.droit.hauteur()
if hg > hd:
return hg+1
else:
return hd+1
Écrire la méthode hauteur de la classe Arbre qui renvoie la hauteur de l'arbre.
def hauteur(self):
5.
Écrire les méthodes taille des classes Noeud et Arbre permettant de calculer la taille d'un arbre.
def taille(self):
def taille(self):
6.
On souhaite écrire une méthode bien_construit de la classe Arbre qui renvoie la valeur True si l'arbre est « bien construit » et False sinon.
On rappelle que la taille maximale d'un arbre binaire de recherche de hauteur est .
a. Quelle est la taille minimale, notée , d'un arbre binaire de recherche « bien construit » de hauteur ?
b. Écrire la méthode bien_construit demandée.
def bien_construit(self):

Corrigé
Corrigé proposé par AprenAI (non officiel)
1. a. Quelle est la taille de l'arbre ci-dessus ?
Réponse : 7
1. b. Quelle est la hauteur de l'arbre ci-dessus ?
Réponse : 4
2. Proposer un arbre binaire de recherche contenant les mêmes clés et dont la hauteur est plus petite que celle de l'arbre initial. / 3. Donner la représentation de l'arbre codé par les instructions.
Réponse : 2. Arbre proposé de hauteur 3 : Un arbre équilibré parfait avec les clés triées (4, 5, 8, 10, 12, 15, 20) : - Racine : 10 - Sous-arbre gauche : racine 5, fils gauche 4, fils droit 8 - Sous-arbre droit : racine 15, fils gauche 12, fils droit 20 Sa hauteur est 3, ce qui est strictement inférieur à 4. 3. Représentation de l'arbre obtenu : - Racine : 10 - Fils gauche de 10 : 8 - Fils gauche de 8 : 4 - Fils droit de 4 : 5 - Fils droit de 10 : 20 - Fils gauche de 20 : 15 - Fils gauche de 15 : 12
4. Écrire la méthode hauteur de la classe Arbre qui renvoie la hauteur de l'arbre.
Réponse : ```python return self.racine.hauteur() ```
Les réponses des 4 questions restantes et l’explication pas à pas sont réservées aux membres Premium. Premium
Résous-le ici : correction automatique, indices et corrigé détaillé.
‹ Exercice 2 · Métropole 2 remplacement 2022 · Exercice 1 · Métropole 2021 (sujet 1) ›
Plus d’exercices d’Arbres : vocabulaire, mesures et algorithmique
- Exercice 3 - Partie 1 · Métropole 2023 (sujet 2)
- Exercice 4 · Métropole 2022 (sujet 1)
- Exercice 1 · Métropole 1 remplacement 2022
- Exercice 1 · Métropole 2022 (sujet 2)
- Exercice 2 · Métropole 2 remplacement 2022
- Exercice 1 · Métropole 2021 (sujet 1)
- Exercice 5 · Métropole 1 remplacement 2021
- Exercice 1 - Arbres · Métropole 2021 (sujet 2)