TD07 Arbres1 Correction
TD07 Arbres1 Correction
TD07 Arbres1 Correction
['A',['B',['D',[],[]],['E',[],[]]],['C',['F',[],[]],[]]]
B E
C D F
G H I
D’après la définition donnée dans cet exercice, qui est en accord avec celle du cours, la hauteur
de cet arbre est h = 4.
La taille correspond au nombre de nœuds soit 9.
2. On décide de numéroter en binaire les nœuds d’un arbre binaire de la façon suivante :
• la racine correspond à 1 ;
• la numérotation pour un fils gauche s’obtient en ajoutant le chiffre 0 à droite au
numéro de son père ;
• la numérotation pour un fils droit s’obtient en ajoutant le chiffre 1 à droite au numéro
de son père ;
Par exemple, dans l’arbre ci-dessous, on a utilisé ce procédé pour numéroter les nœuds A, B, C, E et F.
B :10 E : 11
G:? H :? I :?
2.1. Dans l’exemple précédent, quel est le numéro en binaire associé au nœud G ?
G : 1010
2.2. Quel est le nœud dont le numéro en binaire vaut 13 en décimal ?
1310 = 11012 ⇒ I
2.3. En notant h la hauteur de l’arbre, sur combien de bits seront numérotés les nœuds les plus
en bas ?
Sur 4 bits car h = 4.
On décide de représenter un arbre binaire complet par un tableau de taille n + 1, où n est la taille de
l’arbre, de la façon suivante :
• La racine a pour indice 1 ;
• Le fils gauche du nœud d’indice i a pour indice 2 × i ;
• Le fils droit du nœud d’indice i a pour indice 2 × i + 1 ;
• On place la taille n de l’arbre dans la case d’indice 0.
4.1. Déterminer le tableau qui représente l’arbre binaire complet de l’exemple précédent.
En appliquant les règles du sujet :
[15, A, B , C , D, E , F, G , H , I , J , K , L, M , N , O]
4.2. On considère le père du nœud d’indice i avec i ⩾ 2. Quel est son indice dans le tableau ?
En notant p l’indice du père : 2p = i si fils gauche ou 2p + 1 = i si fils droit.
i i−1
D’où, si i pair : p = et si i impair : p =
2 2
4. Ajouter une fonction hauteur(a) qui reçoit le nœud racine de l’arbre en paramètre et renvoie la
hauteur de l’arbre.
>>> hauteur(racine)
4
def hauteur(a):
if a is None:
return 0
else:
return 1 + max(hauteur(a.gauche), hauteur(a.droit))
5. Créer une fonction feuilles(a) qui reçoit le nœud racine de l’arbre en paramètre et renvoie le
nombre de feuilles dans l’arbre.
>>> feuilles(racine)
4
def feuilles(a):
if a is None:
return 0
if a.gauche is None and a.droit is None :
return 1
else:
return feuilles(a.gauche) + feuilles(a.droit)