Académique Documents
Professionnel Documents
Culture Documents
EL Moukhtar ZEMMOURI
ENSAM – Meknès
Version – 1.0
Définitions
Exemples
10 17 7
13
4 13 4 13
10
2 7 17 2 10 17
10
2
4 13
2 7 17
Exercice
• Les deux fonctions min et max d’un arbre binaire (pas nécessairement ABR)
Fonction C++ Min arbre binaire Fonction C++ Max arbre binaire
/** /**
* Fonction qui retourne la valeur min d'un arbre binaire * Fonction qui retourne la valeur max d'un arbre binaire
* non vide (l'arbre n'est pas forcement un ABR) * non vide (l'arbre n'est pas forcement un ABR)
*/ */
int minAB (Noeud * racine){ int maxAB (Noeud * racine){
int m = racine->valeur; int m = racine->valeur;
if (racine->fg != NULL){ if (racine->fg != NULL){
int a = minAB (racine->fg); int a = maxAB (racine->fg);
if (a < m) m = a; if (a > m) m = a;
} }
if (racine->fd != NULL){ if (racine->fd != NULL){
int b = minAB (racine->fd); int b = maxAB (racine->fd);
if (b < m) m = b; if (b > m) m = b;
} }
return m; return m;
} }
• Un parcours infixé gauche puis droit d’un ABR permet de traiter les
éléments de l’arbre dans l’ordre croissant.
• La recherche d’un élément est facile est rapide :
o Se fait en O(ℎ) , avec ℎ la hauteur de l’ARB
/**
* Fonction Iterative de recherche dans un ABR
* retourne un pointeur sur le noeud contenant val
* ou NULL
*/
Noeud * chercher_iterative (Noeud * racine, int val){
while (racine != NULL){
if (racine->valeur == val) return racine;
if (val < racine->valeur) racine = racine->fg;
else racine = racine->fd;
}
return NULL;
}
Va l e u r m i n d ’ u n A B R
/**
* Fonction Iterative pour inserer une nouvelle valeur dans un ABR
*/
void inserer_iterative (Noeud ** racine, int val){
while ( *racine != NULL ) {
if ( val < (*racine)->valeur ) racine = &((*racine)->fg);
else if ( (*racine)->valeur < val ) racine = &((*racine)->fd);
else {
cout << val << " exist deja dans l'arbre \n";
return ;
}
}
Noeud * p = new Noeud;
p->valeur = val;
p->fg = NULL;
p->fd = NULL;
*racine = p;
10 17 7
13
4 13 4 13
10
2 7 17 2 10 17
• 1er Cas :
o Si le nœud à supprimer est une feuille (SAG et SAD sont vides),
o On supprime simplement ce nœud.
• Exemple : suppression de 9
10 10
4 17 4 17
7 14 7 14
5 9 13 16 5 9 13 16
• 2ième Cas :
o Si le SAD du nœud à supprimer est vide, il suffit de modifier le pointeur du père et de le
faire pointer sur le SAG du nœud à supprimer.
• Exemple : suppression de 17
10 10
4 17 4 17
7 14 7 14
5 9 13 16 5 9 13 16
• 3ième Cas :
o Si le SAG du nœud à supprimer est vide, il suffit de modifier le pointeur du père et de le
faire pointer sur le SAD du nœud à supprimer.
• Exemple : suppression de 4
10 10
4 17 4 17
7 14 7 14
5 9 13 16 5 9 13 16
• 4ième Cas :
o Le SAG et le SAD ne sont pas NULL. La valeur à supprimer est remplacée dans le nœud
par la valeur la plus grande du SAG (ou la valeur la plus petite du SAD). Le nœud
contenant cette valeur est supprimé.
• Exemple : suppression de 10
10 9
4 17 4 17
7 14 7 14
5 9 13 16 5 9 13 16
EL Moukhtar ZEMMOURI
ENSAM – Meknès
Version – 1.0