Solutions pour la mise en oeuvre avec des listes de listes :
def est_feuille(arbre):
if est_vide(arbre):
return False
return est_vide(gauche(arbre)) and est_vide(droit(arbre))
def compte_feuille (arbre):
if est_vide(arbre):
return 0
if est_feuille(arbre):
return 1
return compte_feuille(gauche(arbre)) + compte_feuille(droit(arbre))
def taille (arbre):
if est_vide(arbre):
return 0
return 1 + taille(gauche(arbre)) + taille(droit(arbre))
def hauteur (arbre):
if est_vide(arbre):
return -1
h1 = 1 + hauteur(gauche(arbre))
h2 = 1 + hauteur(droit(arbre))
return max(h1,h2)
Solutions pour la mise en oeuvre avec la classe Noeud :
def est_feuille(self):
if Noeud.est_vide(self):
return False
return Noeud.est_vide(self.gauche()) and Noeud.est_vide(self.droit())
def compte_feuille (self):
if self.est_feuille():
return 1
n = 0
if not Noeud.est_vide(self.gauche()):
n += self.gauche().compte_feuille()
if not Noeud.est_vide(self.droit()):
n += self.droit().compte_feuille()
return n
def taille (self):
if self.est_feuille():
return 1
n = 1
if not Noeud.est_vide(self.gauche()):
n += self.gauche().taille()
if not Noeud.est_vide(self.droit()):
n += self.droit().taille()
return n
def hauteur (self):
if self.est_feuille():
return 0
h1 = 0
h2 = 0
if not Noeud.est_vide(self.gauche()):
h1 = 1 + self.gauche().hauteur()
if not Noeud.est_vide(self.droit()):
h2 = 1 + self.droit().hauteur()
return max(h1,h2)
Solution pour la mise en oeuvre avec un tableau :
def est_feuille(i):
if est_vide(i):
return False
return est_vide(gauche(i)) and est_vide(droit(i))
def compte_feuille(i):
if(est_vide(i)):
return 0
elif est_feuille(i):
return 1
else:
return compte_feuille(gauche(i)) + compte_feuille(droit(i))
def taille (i):
if(est_vide(i)):
return 0
elif est_feuille(i):
return 1
else:
return 1 + taille(gauche(i)) + taille(droit(i))
def hauteur (i):
if(est_vide(i)):
return -1
elif est_feuille(i):
return 0
else:
h1 = 1 + hauteur(gauche(i))
h2 = 1 + hauteur(droit(i))
return max(h1,h2)