Académique Documents
Professionnel Documents
Culture Documents
CorrectionSerie2 SMI4_2020
CorrectionSerie2 SMI4_2020
Exercice 2 :
1. Construire un Arbre Binaire de Recherche à éléments de type entier (ABR) sur
E = {1, 2, 6} ;
Solution :
1 1 2
2 6 1 6
6 2
6 6
1 2
1
2
2. Ecrire une fonction qui retourne le sommet de clé minimale d’un ABR ;
Solution :
Typedef struct noeud_s {
int valeur ;
struct noeud_s ∗ fgauche ;
struct noeud_s ∗ fdroit ;
} noeud ;
typedef noeud* ABR ;
ABR Min_sommet(ABR A)
{ if(A) if (A->fgauche ==NULL) return A;
else return Min_sommet(A->fgauche);
}
3. Ecrire une fonction qui permet d’insérer un nouveau sommet x dans un ABR;
Solution :
ABR insere(ABR A, int v)
{ if ( A == NULL)
{ ABR B = malloc ( sizeof ( noeud) ) ;
B->valeur=v;
B->fgauche=NULL;
B->fdroit=NULL;
4. Écrire une fonction trouve_noeud() qui renvoie l'adresse d'un noeud de l'ABR
donné en paramètre contenant une certaine valeur (ou NULL si cette valeur ne
figure pas dans l'arbre).
Solution :
ABR trouve_noeud ( ABR A , int v )
{
i f ( A == NULL) return NULL;
i f ( v == A->val eur ) return A ;
i f ( v < A->val eur ) return trouve_noeud ( A->fgauche , v ) ;
else return trouve_noeud ( A->fdroit , v ) ;
}
Exercice 3 :
1. Dans les deux exemples d’ABR, où peut-on insérer un élément de clé 13 ? (avec N
une feuille (sans clé))
Solution :
12 14
3 14 18
5
2 5 13 15 9
2 15 19
N N N N N N 13
N N N N N
N N N N
N N
Exercice 4 :
1. Sur l’exemple de l’exercice 3, faire une rotation à droite de centre le nœud de clé
3; puis une rotation à gauche de centre le nœud de clé 14.
Solution :
12 12
2 14
3 14 RD(3)
3
15
2 5 15 5
14
RG(14) 12 15
2
3
5
14
5 18
15 19
2 9
14
9 18
RG(5)
5
15 19
2
14
RD(14) 5
2 18
15 19
Exercice 5 :
1. Dans l’arbre rouge noir donné, que valent Hn(30), Hn(20), Hn(35), Hn(50) ?
(Avec : pour x un nœud d’un arbre rouge noir. On appelle hauteur noire de x,
notée Hn(x), le nombre de nœuds noirs présents dans un chemin descendant de x
(sans l’inclure) vers une feuille de l’arbre).
Solution :
Hn(30) = 3
Hn(20) = 3
Hn(35) = 2
Hn(50) = 1
2. Montrer que, pour un nœud x quelconque dans un arbre rouge noir, le sous-arbre
enraciné à x contient au moins 2Hn(x) - 1 nœuds internes.
Solution :
Soit x un arbre rouge et noir vide, donc l’arbre contient 0 (= 2Hn(x) -1= 20 -1) nœud
interne.
Supposons que x un fils gauche, et un fils droit, donc :
Hn(xfilsgauche) < =Hn(x) -1
Hn(xfilsdroit) < =Hn(x) -1
1. Ecrire une fonction qui retourne vrai si deux sommets sont adjacents, dans un
graphe non orienté ;
2. Ecrire une fonction qui calcul le degré d’un sommet dans un graphe non
orienté ;
3. Ecrire une fonction qui retourne vrai si un sommet j est successeur d’un autre
sommet i, dans un graphe orienté ;
4. Ecrire une fonction qui calcul le degré extérieur d’un sommet, dans un graphe
orienté ;
Solution :
Solution de l’exercice dans le devoir n°2