Académique Documents
Professionnel Documents
Culture Documents
TD : ARBRES
CORRECTION
#Question 1
def isbinary(tree):
if vide(tree): return (True)
if len(tree)!=3: return (False)
else: return isbinary(filsGauche(tree)) and isbinary(filsDroit(tree))
#Question 2
def checkmul(tree) :
if vide(tree): return True
if not estFeuille(tree):
if val(tree)!=val(filsGauche(tree))*val(filsDroit(tree)):
return (False)
return checkmul(filsGauche(tree)) and checkmul(filsDroit(tree))
#Question 3
def path_exists(tree,path) :
if path=="" : return True
if vide(tree) : return False
if val(tree)== path[0] :
return path_exists(filsGauche(tree),path[1:]) or
path_exists(filsDroit(tree),path[1:])
else:
return path_exists(filsGauche(tree),path) or
path_exists(filsDroit(tree),path)
##3
def MaximumRec(A):
if vide(filsDroit(A)): return val(A)
return MaximumRec(filsDroit(A))
if vide(A):
A+= [v,[],[]]
else:
if v<=val(A):
Inserer(v,filsGauche(A))
else:
Inserer(v,filsDroit(A))
def val(a):
if not vide(a): return a[0]
else: return (None)
def fils(a):
if not vide(a): return a[1]
else: return []
def parcourLargeur(a):
L=[]
F=[] #File FIFO
F.append(a) #enfiler a dans la file F
while not vide(F):
n=F.pop(0) #défiler F
L+=[val(n)]
for f in fils(n):
if not vide(f): F.append(f)
return(L)
def nombreNoeuds(a):
if vide(a):
return 0
else:
n=1
for e in fils(a):
n+=nombreNoeuds(e)
return (n)
def estFeuille(a):
if vide(a):return false
return vide(fils(a))
def nombreFeuilles(a):
if vide(a): return 0
elif estFeuille(a): return 1
else:
n=0
for f in fils(a):
n+= nombreFeuilles(f)
return n
def val(a):
if not vide(a):
return a['r']
else:
return None
def Prefixe(a):
if vide(a):
return ([])
else:
return [val(a)] + Prefixe(filsGauche(a)) + Prefixe(filsDroit(a))
def Postfixe(a):
if vide(a):
return ([])
else:
return Postfixe(filsGauche(a)) + Postfixe(filsDroit(a))+ [val(a)]
def Infixe(a):
if vide(a):return ([])
return Infixe(filsGauche(a))+ [val(a)] + Infixe(filsDroit(a))
def parcourLargeur2(a):
F=[] #File FIFO
F.append(a) #enfiler a dans la file F
while F!=[]:
n=F.pop(0) #défiler F
print(val(n),end=' ')
if not vide(filsGauche(n)): F.append(filsGauche(n))
if not vide(filsDroit(n)) : F.append(filsDroit(n))
print()
#Algorithmes de base sur les arbres binaires
def hauteur(a):
if vide(a) or estFeuille(a):
return 0
else:
return 1 + max (hauteur(filsGauche(a)) , hauteur(filsDroit(a)))
def nombreNoeuds(a):
if vide(a):
return 0
else:
return 1 + nombreNoeuds(filsGauche(a)) + nombreNoeuds(filsDroit(a))
def nombreFeuilles(a):
if vide(a):
return 0
elif estFeuille(a):
return 1
else:
return nombreFeuilles(filsGauche(a)) + nombreFeuilles(filsDroit(a))
def estNoeudInterne(a):
if a==[] : return False
return not estFeuille(a)
def nombreNoeudInternes(a):
if vide(a):
return 0
elif estFeuille(a):
return 0
else:
return 1+ nombreNoeudInternes(filsGauche(a)) +
nombreNoeudInternes(filsDroit(a))