Académique Documents
Professionnel Documents
Culture Documents
Dans ce TP on implémentera les différents algorithmes étudiés au cours et qui manipulent les 𝐴𝐵𝑅s
via les opérations:
• Validation de la structure.
• Recherche:
– Appartenance.
– Max et Min.
–
• Modification:
– Insertion.
–
– Suppression.
• Tri:
– Tri d’une liste par l’utilisation d’un 𝐴𝐵𝑅.
1
TP05 Les arbres - Arbre binaire de recherche (ABR) - Corrections. Ecole Royale Navale - CPGE
Page 2 de 9 MP - Informatique
On considère l’arbre binaire de recherche 𝐴 suivant
[1]: A=[25,
[10,
[5,[],[9,[],[]]],
[15,[12,[],[]],[]]],
[30,
[25,[],[28,[],[]]],
[35,[33,[],[]],[37,[36,[],[]],[]]]
]
]
B=[25,
[10,
[5,[],[9,[],[]]],
[15,[12,[],[]],[]]],
[30,
[25,[],[28,[],[]]],
[35,[38,[],[]],[37,[36,[],[]],[]]]
]
]
2
TP05 Les arbres - Arbre binaire de recherche (ABR) - Corrections. Ecole Royale Navale - CPGE
Page 3 de 9 MP - Informatique
Réponse:
[2]: def estABR(A):
if A==[]:
return True
if A[1]!=[] and A[1][0]>A[0]:
return False
if A[2]!=[] and A[2][0]<A[0]:
return False
return estABR(A[1]) and estABR(A[2])
0.1.2 Exercice 2
• Ecrire 𝑒𝑠𝑡𝐴𝐵𝑅2(𝐴) la fonction qui teste si l’arbre binaire 𝐴 est de recherche ou non en
utilisant la liste du parcours infixé de 𝐴.
– Exemple:
∗ 𝑖𝑛 >:𝑙𝑖𝑠𝑡(𝑚𝑎𝑝(𝑒𝑠𝑡𝐴𝐵𝑅, [𝐴, 𝐵]))
∗ 𝑜𝑢𝑡 >:[𝑇 𝑟𝑢𝑒, 𝐹 𝑎𝑙𝑠𝑒]
def estABR2(A):
if A==[]:
return True
L=parcoursInfixe(A)
for i in range(len(L)-1):
if L[i+1]<L[i]:
return False
return True
3
TP05 Les arbres - Arbre binaire de recherche (ABR) - Corrections. Ecole Royale Navale - CPGE
Page 4 de 9 MP - Informatique
Réponse:
[4]: def existRec(A,x):
if A==[]:
return False
if A[0]==x:
return True
if A[0]>x:
return existRec(A[1],x)
if A[0]<x:
return existRec(A[2],x)
0.2.2 Exercice 4
1. Écrire 𝑟𝑒𝑐ℎ𝑒𝑟𝑐ℎ𝑒𝑀 𝑖𝑛𝑅𝑒𝑐(𝐴), (et 𝑟𝑒𝑐ℎ𝑒𝑟𝑐ℎ𝑒𝑀 𝑎𝑥𝑅𝑒𝑐(𝐴)) une fonction récursive qui retourne
la valeur max (min) d’un ABR 𝐴.
• Exemple:
– 𝑖𝑛 >:𝑟𝑒𝑐ℎ𝑒𝑟𝑐ℎ𝑒𝑀 𝑖𝑛𝑅𝑒𝑐(𝐴)
– 𝑜𝑢𝑡 >:5
– 𝑖𝑛 >:𝑟𝑒𝑐ℎ𝑒𝑟𝑐ℎ𝑒𝑀 𝑎𝑥𝐼𝑡(𝐴)
– 𝑜𝑢𝑡 >:37
2. Écrire 𝑟𝑒𝑐ℎ𝑒𝑟𝑐ℎ𝑒𝑀 𝑖𝑛𝐼𝑡 et 𝑟𝑒𝑐ℎ𝑒𝑟𝑐ℎ𝑒𝑀 𝑎𝑥𝐼𝑡 les versions itératives de 𝑟𝑒𝑐ℎ𝑒𝑟𝑐ℎ𝑒𝑀 𝑖𝑛𝑅𝑒𝑐 et
𝑟𝑒𝑐ℎ𝑒𝑟𝑐ℎ𝑒𝑀 𝑎𝑥𝑅𝑒𝑐.
Réponse:
[6]: def rechercheMinRec(A):
if A==[]:
return None
4
TP05 Les arbres - Arbre binaire de recherche (ABR) - Corrections. Ecole Royale Navale - CPGE
Page 5 de 9 MP - Informatique
if A[1]==[]:
return A[0]
return rechercheMinRec(A[1])
def rechercheMaxRec(A):
if A==[]:
return None
if A[2]==[]:
return A[0]
return rechercheMaxRec(A[2])
def rechercheMaxIt(A):
while A!=[]:
if A[2]==[]:
return A[0]
A=A[2]
return None
min = 5 et max = 37
Réponse:
[9]: def insertionRec(A,v):
if A==[]:
A.extend([v,[],[]])
elif v<=A[0]:
return insertionRec(A[1],v)
else:
return insertionRec(A[2],v)
5
TP05 Les arbres - Arbre binaire de recherche (ABR) - Corrections. Ecole Royale Navale - CPGE
Page 6 de 9 MP - Informatique
[10]: insertionRec(A,29)
A
[10]: [25,
[10, [5, [], [9, [], []]], [15, [12, [], []], []]],
[30,
[25, [], [28, [], [29, [], []]]],
[35, [33, [], []], [37, [36, [], []], []]]]]
[12]: insertionIt(A,30)
A
[12]: [25,
[10, [5, [], [9, [], []]], [15, [12, [], []], []]],
[30,
[25, [], [28, [], [29, [], [30, [], []]]]],
[35, [33, [], []], [37, [36, [], []], []]]]]
0.3.2 Exercice 6
1. Écrire une fonction récursive 𝑠𝑢𝑝𝑝𝑟𝑖𝑚𝑒𝑟𝑅𝑒𝑐(𝐴, 𝑣) qui supprime un nœud de valeur 𝑣 dans 𝐴
tout en préservant la structure ABR.
• Exemple:
– 𝑖𝑛 >: 𝑠𝑢𝑝𝑝𝑟𝑖𝑚𝑒𝑟𝑅𝑒𝑐(𝐴, 37)
– 𝑖𝑛 >: 𝐴
– 𝑜𝑢𝑡 >: [25, [10, [5, [], [9, [], []]], [15, [12, [], []], []]], [30, [25, [], [28, [], []]], [35, [33, [], []], [36, [], []]]]]
2. Écrire 𝑠𝑢𝑝𝑝𝑟𝑖𝑚𝑒𝑟𝐼𝑡(𝐴, 𝑣) la version itérative de la fonction 𝑠𝑢𝑝𝑝𝑟𝑖𝑚𝑒𝑟𝐼𝑡(𝐴, 𝑣).
6
TP05 Les arbres - Arbre binaire de recherche (ABR) - Corrections. Ecole Royale Navale - CPGE
Page 7 de 9 MP - Informatique
Réponse:
[13]: def supprimerRec(A,v):
if A!=[]:
if v<A[0]:
supprimerRec(A[1],v)
elif v>A[0]:
supprimerRec(A[2],v)
else:
if A[1]==[] and A[2]==[]:
del(A[:])
elif A[1]==[]:
A[0]=A[2][0]
supprimerRec(A[2],A[2][0])
elif A[2]==[]:
A[0]=A[1][0]
supprimerRec(A[1],A[1][0])
else:
v=rechercheMinIt(A[2])
A[0]=v
supprimerRec(A[2],v)
[14]: supprimerRec(A,37)
A
[14]: [25,
[10, [5, [], [9, [], []]], [15, [12, [], []], []]],
[30,
[25, [], [28, [], [29, [], [30, [], []]]]],
[35, [33, [], []], [36, [], []]]]]
7
TP05 Les arbres - Arbre binaire de recherche (ABR) - Corrections. Ecole Royale Navale - CPGE
Page 8 de 9 MP - Informatique
else:
v=rechercheMinIt(A[2])
A[0]=v
A=A[2]
[16]: supprimerIt(A,30)
A
[16]: [25,
[10, [5, [], [9, [], []]], [15, [12, [], []], []]],
[33, [25, [], [28, [], [29, [], [30, [], []]]]], [35, [], [36, [], []]]]]
Réponse:
[17]: def insertSucc(L):
A=[]
n=len(L)
for i in range(n):
insertionIt(A,L[i])
return A
[18]: L=[4,8,2,7,3,6,1,5,0,9]
insertSucc(L)
[18]: [4,
[2, [1, [0, [], []], []], [3, [], []]],
[8, [7, [6, [5, [], []], []], []], [9, [], []]]]
0.4.2 Exercice 8
• Écrire 𝑝𝑎𝑟𝑐𝑜𝑢𝑟𝑠𝐼𝑛𝑓𝑖𝑥𝑒(𝐴) qui retourne la liste du parcours infixe de l’ABR 𝐴, puis à l’aide
de 𝑖𝑛𝑠𝑒𝑟𝑡𝑆𝑢𝑐𝑐(𝐿) et 𝑝𝑎𝑟𝑐𝑜𝑢𝑟𝑠𝐼𝑛𝑓𝑖𝑥𝑒(𝐴), écrire 𝑡𝑟𝑖𝐴𝐵𝑅(𝐿) la fonction qui retourne la liste
triée (ordre croissant) de la liste 𝐿.
– Exemple:
∗ 𝑖𝑛 >: 𝐿 = [4, 8, 2, 7, 3, 6, 1, 5, 0, 9]
∗ 𝑖𝑛 >: 𝑡𝑟𝑖𝐴𝐵𝑅(𝐿)
∗ 𝑜𝑢𝑡 >: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
8
TP05 Les arbres - Arbre binaire de recherche (ABR) - Corrections. Ecole Royale Navale - CPGE
Page 9 de 9 MP - Informatique
Réponse:
[19]: def triABR(L):
A=insertSucc(L)
return parcoursInfixe(A)
[20]: L=[4,8,2,7,3,6,1,5,0,9]
triABR(L)
[20]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]