Skip to content
Extraits de code Groupes Projets
Valider a0c2b83f rédigé par Sylvain Melot's avatar Sylvain Melot
Parcourir les fichiers

Update 2 files

- /docs/07_Les_arbres/6_Parcours_largeur.md
- /docs/07_Les_arbres/scripts/largeur_arbre.py
parent 248df545
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Pipeline #38807 réussi
......@@ -79,4 +79,10 @@ Pour l'arbre suivant:
![arbres](images/largeur_1.png){ width=25%; : .center }
![arbres](images/largeur.gif){ width=80%; : .center }
\ No newline at end of file
![arbres](images/largeur.gif){ width=80%; : .center }
!!! question "Compléter le script ci-dessous en définissant la fonction `parcours_largeur`:"
Vous utiliserez `est_vide()` ainsi que `etiquette()`, `gauche()`, et `droit()` qui renvoient respectivement l'étiquette, le sous-arbre gauche, et le sous-arbre droit de la racine
{{IDE('scripts/largeur_arbre')}}
\ No newline at end of file
# --- PYODIDE:env --- #
class Arbre:
def __init__(self, *args):
"""Creation d'un arbre vide"""
if len(args) == 0:
self.contenu = (None, None, None)
"""Creation d'un arbre non vide"""
elif len(args) == 3:
self.contenu = (args[0], args[1], args[2])
"""Creation d'une feuille"""
elif len(args) == 1:
self.contenu = (args[0] ,Arbre(), Arbre())
def __repr__(self):
"""permet d'afficher l'arbre'"""
return str(self.contenu)
def __eq__(self, other):
"""permet de vérifier si deux arbres sont égaux"""
return self.contenu == other.contenu
def droit(self):
"""Pour obtenir l'arbre droit"""
return self.contenu[2]
def gauche(self):
"""Pour obtenir l'arbre gauche"""
return self.contenu[1]
def etiquette(self):
"""Pour obtenir l'etiquette"""
return self.contenu[0]
def est_vide(self):
"""Vérifie si l'arbre est vide"""
return self.contenu == (None, None, None)
def est_feuille(self):
return self.droit() == Arbre() and self.gauche() == Arbre()
class File:
"""Implémentation basique d'une file"""
def __init__(self):
"Initialisation d'une file vide"
self.contenu = []
#Méthodes:
def enfiler(self, valeur):
"""enfile la valeur passée en paramètre et renvoie la file"""
self.contenu.append(valeur)
return self
def defiler(self):
"""defile la valeur au début de la file et renvoie la file"""
if len(self.contenu) != 0:
self.contenu.pop(0)
return self
def premier(self):
"""Renvoie le premier élément au début de la file"""
if len(self.contenu) == 0:
return None
return self.contenu[0]
def est_vide(self):
"""Vérifie si la file est vide"""
return self.contenu == []
#Méthodes spéciales:
def __len__(self):
"""donne la longueur de la file"""
return len(self.contenu)
def __repr__ (self):
"""permet d'afficher la file"""
return str(self.contenu)
def __eq__(self, other):
"""permet de comparer deux files"""
return self.contenu == other.contenu
# --- PYODIDE:code --- #
def parcours_largeur(arbre):
"""
Préconditions: Arbre de la classe "Arbre"
Postconditions: Parcours en largeur de l'arbre (liste)
"""
...
# --- PYODIDE:corr --- #
def parcours_largeur(arbre):
"""
Préconditions: Arbre de la classe "Arbre"
Postconditions: Parcours en largeur de l'arbre (liste)
"""
if arbre.est_vide():
return []
parcours = []
file = File()
file.enfiler(arbre)
while not file.est_vide():
nouvel_arbre = file.premier()
parcours.append(nouvel_arbre.etiquette())
file.defiler()
if not nouvel_arbre.gauche().est_vide():
file.enfiler(nouvel_arbre.gauche())
if not nouvel_arbre.droit().est_vide():
file.enfiler(nouvel_arbre.droit())
return parcours
# --- PYODIDE:tests --- #
arbre_1 = Arbre("A", Arbre("B", Arbre("D"), Arbre("E", Arbre("H"), Arbre("I"))), Arbre("C", Arbre("F"), Arbre("G")))
assert parcours_largeur(arbre_1) == ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']
# --- PYODIDE:secrets --- #
arbre_2 = Arbre("A", Arbre("B", Arbre("D"), Arbre("E")), Arbre("C"))
assert parcours_largeur(arbre_2) == ['A', 'B', 'C', 'D', 'E']
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter