class Arbre:
def __init__(self,racine,*enfants):
self.root = racine
self.enfants = enfants
""" Parcours"""
# en profondeur, ordre préfixe
def prefixe(self, L = []):
L.append(self.root)
for child in self.enfants:
child.prefixe(L)
return L
# en profondeur, ordre postfixe
def postfixe(self, L = []):
for child in self.enfants:
child.postfixe(L)
L.append(self.root)
return L
# en largeur
def largeur(self):
F = []
L = []
# Ajouter la racine et l'objet courant à L et F respectivement
L.append(self.root)
F.append(self)
# Tant qu'il y a des éléments dans F
while F != []:
# Prendre le premier élément de F
current = F.pop(0)
# Ajouter tous les enfants à L et F
for child in current.enfants:
L.append(child.root)
F.append(child)
return L
""" affichages """
# sous forme de liste
def afficher_liste(self, ordre):
if ordre == 'prefixe':
print(self.prefixe())
elif ordre == 'postfixe':
print(self.postfixe())
elif ordre == 'largeur':
print(self.largeur())
# avec marges
def affiche(self, space = 0):
spaces = " " * space
print(spaces, self.root)
for child in self.enfants:
child.affiche(space + 2)
tree = Arbre('A',
Arbre('B',
Arbre('C',
Arbre('D', Arbre('Z')),
Arbre('E', Arbre('X'), Arbre('Y'), Arbre('P'))),
Arbre('F', Arbre('G'), Arbre('H'))),
Arbre('I',
Arbre('J', Arbre('K'), Arbre('L')),
Arbre('M', Arbre('N'), Arbre('O'))))
tree.AfficheListe('prefixe')
tree.AfficheListe('postfixe')
tree.AfficheListe('largeur')
tree.Affiche()