22 KiB
22 KiB
In [ ]:
# Tableau de la question 4
arbre_expression = ['*', '-', 5, 2, 6, None, None, None, None, None, None, None, None, None, None]In [ ]:
# Question 2 : Écrire le tableau représentant l'arbre
t = # À compléterIn [ ]:
def creation_arbre(r, profondeur):
"""r : la racine (str ou int). la profondeur de l'arbre (int)"""
Arbre = [r] + [None for i in range(2**(profondeur+1)-2)]
return Arbre
def insertion_noeud(arbre, n, fg, fd):
"""Insère les noeuds et leurs enfants dans l'arbre"""
indice = arbre.index(n)
arbre[2*indice+1] = fg
arbre[2*indice+2] = fd
# création de l'arbre
arbre = creation_arbre("r", 5)
# ajout des noeuds par niveau de gauche à droite
insertion_noeud(arbre, "r", "a", "b")
insertion_noeud(arbre, "a", "c", "d")
insertion_noeud(arbre, "b", "e", "f")
insertion_noeud(arbre, "c", None, "h")
insertion_noeud(arbre, "d", "i", "j")
insertion_noeud(arbre, "e", "k", None)
insertion_noeud(arbre, "f", None, None)
insertion_noeud(arbre, "h", None, None)
insertion_noeud(arbre, "i", None, None)
insertion_noeud(arbre, "j", "m", None)
insertion_noeud(arbre, "k", None, None)
insertion_noeud(arbre, "m", None, None)
# pour vérifier
print("Taille du tableau :", len(arbre))
print("Arbre :", arbre)In [ ]:
# Question 1 : Parent d'un noeud
def parent(arbre, noeud):
"""Retourne le parent du noeud s'il existe, None sinon"""
pass # À compléterIn [ ]:
# Question 2 : Arbre vide
def est_vide(arbre):
"""Retourne True si l'arbre est vide"""
pass # À compléterIn [ ]:
# Question 3 : Enfants d'un noeud
def enfants(arbre, noeud):
"""Retourne les enfants du noeud"""
pass # À compléterIn [ ]:
# Question 4 : Fils gauche
def fils_gauche(arbre, noeud):
"""Retourne le fils gauche s'il existe, None sinon"""
pass # À compléterIn [ ]:
# Question 5 : Fils droit
def fils_droit(arbre, noeud):
"""Retourne le fils droit s'il existe, None sinon"""
pass # À compléterIn [ ]:
# Question 6 : Est racine
def est_racine(arbre, noeud):
"""Retourne True si le noeud est la racine"""
pass # À compléterIn [ ]:
# Question 7 : Est feuille
def est_feuille(arbre, noeud):
"""Retourne True si le noeud est une feuille"""
pass # À compléterIn [ ]:
# Question 8 : A un frère
def a_frere(arbre, noeud):
"""Retourne True si le noeud a un frère"""
pass # À compléterIn [ ]:
# Exercice 4 : Représentation avec tableaux imbriqués
t = # À compléterIn [ ]:
def noeud(nom, fg=None, fd=None):
return {'racine': nom, 'fg': fg, 'fd': fd}
# création des noeuds
k = noeud('k')
f = noeud('f')
e = noeud('e', k, None)
b = noeud('b', e, f)
m = noeud('m')
j = noeud('j', m, None)
i = noeud('i')
d = noeud('d', i, j)
h = noeud('h')
c = noeud('c', None, h)
a = noeud('a', c, d)
racine = noeud('r', a, b)
# création de l'arbre sous forme de liste imbriquée
def construit(arbre):
if arbre is None:
return []
else:
return [arbre['racine'], construit(arbre['fg']), construit(arbre['fd'])]
arbre1 = construit(racine)
print(arbre1)In [ ]:
# Exercice 5 : Fonctions pour tableaux imbriqués
# À compléterIn [ ]:
# Exercice 6 : Hauteur de l'arbre
def hauteur(arbre):
"""Retourne la hauteur de l'arbre"""
pass # À compléter
# Test
# print(hauteur(arbre1)) # Doit afficher 4In [ ]:
# Exercice 7 : Parcours en largeur
def parcours_largeur(arbre):
"""Parcours en largeur de l'arbre"""
pass # À compléterIn [ ]:
# Exercice 8 : Parcours en profondeur
def parcours_profondeur(arbre):
"""Parcours en profondeur de l'arbre"""
pass # À compléterIn [ ]:
# Exercice 12 : Implémentation des trois parcours
def parcours_1(arbre):
"""Premier algorithme - À identifier"""
pass # À compléter
def parcours_2(arbre):
"""Deuxième algorithme - À identifier"""
pass # À compléter
def parcours_3(arbre):
"""Troisième algorithme - À identifier"""
pass # À compléterIn [ ]:
# Exercice 13 : Classe Noeud
class Noeud:
def __init__(self, valeur, gauche=None, droit=None):
"""Constructeur de la classe Noeud"""
pass # À compléter
def est_feuille(self):
"""Retourne True si le noeud est une feuille"""
pass # À compléter
def hauteur(self):
"""Retourne la hauteur de l'arbre"""
pass # À compléter
def parcours_prefixe(self):
"""Parcours préfixe de l'arbre"""
pass # À compléter
def parcours_infixe(self):
"""Parcours infixe de l'arbre"""
pass # À compléter
def parcours_suffixe(self):
"""Parcours suffixe de l'arbre"""
pass # À compléterIn [ ]:
# Construction de l'arbre avec la classe Noeud
# À compléter













