Arbres - Exercices - 1
Exercice 1
2020, sujet 0
Question 1
DĂ©terminer la taille et la hauteur de lâarbre binaire suivant :
graph TD
A(A)
B(B)
E(E)
C(C)
D(D)
F(F)
L( )
G(G)
J( )
H(H)
I(I)
A --- B
A --- E
B --- C
B --- D
E --- F
E --- L
D --- G
D --- J
F --- H
F --- I
linkStyle 5 stroke-width:0px;
linkStyle 7 stroke-width:0px;
style L opacity:0;
style J opacity:0;
Question 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 .
graph TD
A(A : 1)
B(B : 10)
E(E : 11)
C(C : 100)
D(D : ?)
F(F : 110)
L( )
G(G : ?)
J( )
H(H : ?)
I(I : ?)
A --- B
A --- E
B --- C
B --- D
E --- F
E --- L
D --- G
D --- J
F --- H
F --- I
linkStyle 5 stroke-width:0px;
linkStyle 7 stroke-width:0px;
style L opacity:0;
style J opacity:0;
- Dans lâexemple prĂ©cĂ©dent, quel est le numĂ©ro en binaire associĂ© au nĆud G ?
- Quel est le nĆud dont le numĂ©ro en binaire vaut 13 en dĂ©cimal ?
- En notant \(h\) la hauteur de lâarbre, sur combien de bits seront numĂ©rotĂ©s les nĆuds les plus en bas ?
- Justifier que pour tout arbre de hauteur \(h\) et de taille \(n \geqslant 2\), on a : \(h\leqslant n \leqslant 2^h-1\)
Question 3
Un arbre binaire est dit complet si tous les niveaux de lâarbre sont remplis.
graph TD
A(A)
B(B)
C(C)
D(D)
E(E)
F(F)
G(G)
H(H)
I(I)
J(J)
K(K)
L(L)
M(M)
N(N)
O(O)
A --- B
A --- C
B --- D
B --- E
C --- F
C --- G
D --- H
D --- I
E --- J
E --- K
F --- L
F --- M
G --- N
G --- O
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 \times i\) ;
- Le fils droit du nĆud dâindice i a pour indice \(2 \times i + 1\) ;
- On place la taille \(n\) de lâarbre dans la case dâindice 0.
RĂ©pondre aux questions suivantes :
- DĂ©terminer le tableau qui reprĂ©sente lâarbre binaire complet de lâexemple prĂ©cĂ©dent.
- On considĂšre le pĂšre du nĆud dâindice \(i\) avec \(i \geqslant 2\). Quel est son indice dans le tableau ?
Question 4
On se place dans le cas particulier dâun arbre binaire de recherche complet oĂč les nĆuds contiennent des entiers et pour lequel la valeur de chaque noeud est supĂ©rieure Ă celles des noeuds de son fils gauche, et infĂ©rieure Ă celles des noeuds de son fils droit.
Ăcrire une fonction recherche
ayant pour paramĂštres un arbre arbre
et un élément element
. Cette
fonction renvoie True
si element
est dans lâarbre et False
sinon. Lâarbre sera reprĂ©sentĂ© par un tableau
comme dans la question précédente.
Corrigé
Q1 La taille est 9, la hauteur est 4.
Q2 1. G est associé à 1010.
Q2 2. 13 s'Ă©crit 1101 en binaire, c'est donc le nĆud I.
Q2 3. Les nĆuds les plus en bas sont notĂ©s sur \(h\) bits.
Q2 4. L'arbre de hauteur \(h\) de taille minimale est l'arbre filiforme, qui est de taille \(h\).
L'arbre de hauteur \(h\) de taille maximale est l'arbre complet, qui est de taille \(2^h-1\). Si \(n\) est la taille d'un arbre quelconque de taille \(h\), on a donc bien
\(h \leqslant n \leqslant 2^h-1\).
Q3 1. Tableau : [15, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O]
.
Q3 2. Le pĂšre du nĆud d'indice i
a pour indice i//2
.
Q4 :
def recherche(arbre, element):
i = 1
while i < len(arbre):
if arbre[i] == element:
return True
if element < arbre[i]:
i = 2*i # on se place sur le fils gauche
else:
i = 2*i + 1 # on se place sur le fils droit
return False