![Page 1: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/1.jpg)
IFT-2000: Structures de Données
Les arbres
![Page 2: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/2.jpg)
Arbre• Un arbre est une structure dans laquelle on a un nœud qui
est une racine, puis chaque nœud a zéro, un ou plusieurs enfants.
• Les nœuds qui n’ont pas d’enfants sont appelées des feuilles.
Feuille
Racine
Feuille Feuille Feuille
![Page 3: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/3.jpg)
Arbre binaire
• Un arbre est dit binaire si chacun de ses nœuds comporte un maximum de deux enfants.
![Page 4: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/4.jpg)
Arbre binaire de recherche• Un arbre binaire est dit de recherche s’il respecte la règle
suivante:• Pour chaque nœud, tous ses descendants de gauche comportent
des valeurs plus petites que lui, et tous ses descendants de droite comportent des valeurs plus grandes que lui.
12 40
25
33 57
![Page 5: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/5.jpg)
Implémentation d’une recherche simple
typedef struct nœud{
float valeur;struct nœud *enfant_de_gauche; // 0 s’il n’y a pas d’enfant de gauche.struct nœud *enfant_de_droite; // 0 s’il n’y a pas d’enfant de droite.
} Noeud;Bool est_present(const Nœud *racine, float nombre){
}
![Page 6: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/6.jpg)
Implémentation d’une fonction qui compte les noeuds
typedef struct nœud{
float valeur;struct nœud *enfant_de_gauche; // 0 s’il n’y a pas d’enfant de gauche.struct nœud *enfant_de_droite; // 0 s’il n’y a pas d’enfant de droite.
} Noeud;int nb_noeuds(const Nœud *racine){
}
![Page 7: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/7.jpg)
Définitions• La hauteur d’un arbre est le nombre de
rangées qu’il comporte.
12 40
25
33 57
Hauteur: 3
![Page 8: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/8.jpg)
Implémentation de la fonction hauteur
typedef struct nœud{
float valeur;struct nœud *enfant_de_gauche; // 0 s’il n’y a pas d’enfant de gauche.struct nœud *enfant_de_droite; // 0 s’il n’y a pas d’enfant de droite.
} Noeud;int hauteur(const Nœud *racine){
}
![Page 9: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/9.jpg)
Structure pour l’arbre avec un point d’entrée
typedef struct nœud{
float valeur;struct nœud *enfant_de_gauche; // 0 s’il n’y a pas d’enfant de gauche.struct nœud *enfant_de_droite; // 0 s’il n’y a pas d’enfant de droite.
} Noeud;typedef struct{
Nœud *racine; // 0 si l’arbre est vide.int nb_noeuds; // Ce champ est optionel, mais il permet d’accélérer les requêtes sur la taille.
} Arbre;Int hauteur(const Nœud *racine){ // …}int hauteur(const Arbre *arbre){
return hauteur(arbre->racine);}
![Page 10: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/10.jpg)
Clé de recherche• Une clé de recherche doit toujours être choisie, afin d’établir la relation d’ordre qui
régit la position des nœuds.• D’autres information peut être emmagasinée dans chaque nœud.• Dans l’exemple ci-bas, la clé de recherche est le prénom, et l’information
complémentaire est l’âge. La relation d’ordre utilisée pour déterminer la position relative des nœuds est la comparaison lexicographique (c’est-à-dire l’ordre alphabétique) des prénoms.
Claude55
Jean40
Dominic31
Françis35
Nestor5
![Page 11: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/11.jpg)
Implémentation d’une recherche par clé
typedef struct nœud{
char prenom[100];int age;struct nœud *enfant_de_gauche; // 0 s’il n’y a pas d’enfant de gauche.struct nœud *enfant_de_droite; // 0 s’il n’y a pas d’enfant de droite.
} Noeud;int trouve_age(const Nœud *racine, const char *prenom){
}
![Page 12: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/12.jpg)
Ajout (non équilibré)typedef struct nœud{
char prenom[100];int age;struct nœud *enfant_de_gauche; // 0 s’il n’y a pas d’enfant de gauche.struct nœud *enfant_de_droite; // 0 s’il n’y a pas d’enfant de droite.
} Noeud;Nœud *ajouter(Nœud *racine, const char *prenom, int age){
}
![Page 13: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/13.jpg)
Arbre binaire de recherche équilibré• Un arbre binaire de recherche est dit équilibré (ou balancé)
quand on lui impose un critère sur la position de ses nœuds, et que ce critère permet de maintenir une hauteur de l’ordre du logarithme du nombre de nœuds qu’il comporte.
Arbre bien équilibré Arbre mal équilibré
![Page 14: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/14.jpg)
Arbre binaire de recherche AVL• Il existe deux façons bien connues d’équilibrer
les arbres binaires de recherche: Les arbres AVL, et les arbres Rouge-Noir. Pour le cours de Structures de Données, nous ne nous attarderons qu’aux arbres AVL.
• Dans un arbre AVL, la règle de l’équilibre est la suivante:
Pour chaque nœud, la hauteur de son sous-arbre de gauche et celle de son sous-arbre de droite
doivent différer d’au maximum 1.
![Page 15: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/15.jpg)
Équilibre AVL
111
2 2
3
Bien équilibré selon la règle AVL
1
2 1
3
Bien équilibré selon la règle AVL
112
3 2
4
Bien équilibré selon la règle AVL
1
12
3 1
4
Mal équilibré selon la règle AVL
1
![Page 16: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/16.jpg)
Nœud critique
Mais ce n’est pas toujours le cas
12
3 1
4
Ici, le nœud critique du déséquilibreest la racine
1
• Quand il y a un déséquilibre, le nœud le plus bas à partir duquel il y a une différence de 2 ou plus est appelé le nœud critique.
![Page 17: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/17.jpg)
Plusieurs nœuds critiques• Il peut parfois y avoir plusieurs nœuds critiques.
Dans ce cas, on s’occupe d’abord du plus bas de tous.
![Page 18: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/18.jpg)
Maintien de l’équilibre• Quand on implémente un arbre AVL, il faut maintenir son équilibre.• Les déséquilibres surviennent soit lors d’un ajout, soit lors d’une
suppression.• Le ou les nœuds critiques engendrés, s’il y a lieu, sont toujours sur le
chemin de l’ajout ou de la suppression.
Nouveaunoeud
![Page 19: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/19.jpg)
Rééquilibrer un arbre déséquilibré• Quand un déséquilibre apparaît, il faut
remodeler la partie de l’arbre dont la racine est le nœud critique.
Nouveaunoeud
![Page 20: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/20.jpg)
Les quatre cas de déséquilibre• Il faut d’abord identifier le genre de déséquilibre auquel on a affaire.• D’abord, il faut voir de quel côté l’arbre penche à partir du nœud
critique.• Dans le cas de l’exemple ci-bas, c’est vers la gauche.
Nouveaunoeud
![Page 21: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/21.jpg)
Les quatre cas de déséquilibre• L’enfant immédiat du nœud critique du côté
vers lequel l’arbre penche s’appelle le nœud sous-critique.
Nœudcritique
Nœudsous-critique
Nouveaunoeud
![Page 22: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/22.jpg)
Les quatre cas de déséquilibre• Puis il faut regarder de quel côté penche l’arbre à partir du nœud sous-
critique.• L’arbre sous-critique n’a pas besoin d’être déséquilibré pour qu’on considère
qu’il penche. Une différence de 1 suffit pour identifier le cas (contrairement à la vérification qu’on faisait au départ pour vérifier s’il y avait déséquilibre).
• Dans l’exemple ci-bas, l’arbre sous-critique penche vers la droite.
Nœudcritique
Nœudsous-critique
Nouveaunoeud
![Page 23: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/23.jpg)
Les quatre cas de déséquilibre• Nous avons donc, dans cet exemple-ci, un déséquilibre vers la gauche, avec un
arbre sous-critique qui penche vers la droite.• Quand le sens du déséquilibre principal est différent du sens dans lequel
l’arbre sous-critique penche, alors deux rotations sont nécessaires. Nous appelons ça un zig-zag.
• Quand le sens du déséquilibre principal est le même que le sens dans lequel l’arbre sous-critique penche, ou bien que l’arbre sous-critique ne penche pas dutout, alors une seule rotation est nécessaire, et il s’agit d’un zig-zig.
• Dans notre exemple, nous aurons donc à faire deux rotations.
Nœudcritique
Nœudsous-critique
Nouveaunoeud
![Page 24: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/24.jpg)
Les rotations• Quand nous nous retrouvons dans le cas où il
faut faire deux rotations, la première sert finalement à faire pencher l’arbre sous-critique dans le même sens que l’arbre critique, de façon à nous retrouver dans le cas simple d’une seule rotation.
Nœudcritique
Nœudsous-critique
Nouveaunoeud
![Page 25: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/25.jpg)
Les rotations
Nœudcritique
Nœudsous-critique
Nouveaunoeud
• Première rotation (préparatoire à la deuxième).
![Page 26: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/26.jpg)
Les rotations
Nœudcritique
Nouveaunoeud
• Première rotation (préparatoire à la deuxième).
![Page 27: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/27.jpg)
Les rotations
Nœudcritique
Nouveaunoeud
• Première rotation (préparatoire à la deuxième).
![Page 28: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/28.jpg)
Les rotations
Nœudcritique
Nouveaunoeud
• Première rotation (préparatoire à la deuxième).
![Page 29: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/29.jpg)
Les rotations
Nœudcritique
Nouveaunoeud
• Première rotation (préparatoire à la deuxième).
![Page 30: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/30.jpg)
Les rotations
Nœudcritique
Nouveaunoeud
• Première rotation (préparatoire à la deuxième).
![Page 31: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/31.jpg)
Les rotations
Nœudcritique
Ancien nœudsous-critique
Nouveaunoeud
Nœudnouvellementsous-critique
• La première rotation est terminée.• Grâce à cette première rotation, nous avons retrouvé un cas de rotation
simple, car l’arbre sous-critique penche maintenant dans le même sens que le déséquilibre au nœud critique.
![Page 32: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/32.jpg)
Les rotations
Nœudcritique
Nouveaunoeud
• Deuxième rotation.
![Page 33: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/33.jpg)
Les rotations
Nouveaunoeud
• Deuxième rotation.
![Page 34: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/34.jpg)
Les rotations
Nouveaunoeud
• Deuxième rotation.
![Page 35: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/35.jpg)
Les rotations
Nouveaunoeud
• Deuxième rotation.
![Page 36: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/36.jpg)
Les rotations
Nouveaunoeud
• Deuxième rotation.
![Page 37: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/37.jpg)
Les rotations
Nouveaunoeud
• Deuxième rotation.
![Page 38: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/38.jpg)
Les rotations
Nouveaunoeud
• Deuxième rotation.
![Page 39: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/39.jpg)
Les rotations
Nouveaunoeud
• Les deux rotations sont terminées, nous avons maintenant un arbre AVL équilibré.
![Page 40: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/40.jpg)
Les rotations
50
25 70
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• Voici un autre exemple d’ajout. Celui-ci engendre un cas simple de déséquilibre, car l’arbre sous-critique penche dans le même sens que le déséquilibre au nœud critique.
• Supposons que nous ajoutons un nœud avec la valeur de clé 40 à l’arbre ci-bas.40
![Page 41: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/41.jpg)
Les rotations
<50
25 70
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• Ajout de 40.
40
![Page 42: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/42.jpg)
Les rotations
<50
25 70
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• Ajout de 40.
40
![Page 43: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/43.jpg)
Les rotations
<50
25 70
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• Ajout de 40.
40
![Page 44: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/44.jpg)
Les rotations
50
>25 70
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• Ajout de 40.
40
![Page 45: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/45.jpg)
Les rotations
50
>25 70
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• Ajout de 40.
40
![Page 46: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/46.jpg)
Les rotations
50
25 70
13
45
85
8
48
28
38
>36 60
26
64 9055
62
17
• Ajout de 40.
40
![Page 47: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/47.jpg)
Les rotations
50
25 70
13
45
85
8
48
28
38
>36 60
26
64 9055
62
17
• Ajout de 40.
40
![Page 48: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/48.jpg)
Les rotations
50
25 70
13
<45
85
8
48
28
38
36 60
26
64 9055
62
17
• Ajout de 40.
40
![Page 49: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/49.jpg)
Les rotations
50
25 70
13
<45
85
8
48
28
38
36 60
26
64 9055
62
17
• Ajout de 40.
40
![Page 50: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/50.jpg)
Les rotations
50
25 70
13
45
85
8
48
28
>38
36 60
26
64 9055
62
17
• Ajout de 40.
40
![Page 51: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/51.jpg)
Les rotations
50
25 70
13
45
85
8
48
28
>38
36 60
26
64 9055
62
17
• Ajout de 40.
40
![Page 52: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/52.jpg)
Les rotations
50
25 70
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• La position du nouveau nœud 40 a été déterminée. On doit donc, en remontant, vérifier si l’arbre est déséquilibré.
40
![Page 53: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/53.jpg)
Les rotations
50
25 70
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• On vérifie l’équilibre nœud par nœud, en remontant le long du chemin parcouru depuis la racine.
40
10
![Page 54: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/54.jpg)
Les rotations
50
25 70
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• On vérifie l’équilibre nœud par nœud, en remontant le long du chemin parcouru depuis la racine.
40
12
![Page 55: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/55.jpg)
Les rotations
50
25 70
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• On vérifie l’équilibre nœud par nœud, en remontant le long du chemin parcouru depuis la racine.
40
32
![Page 56: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/56.jpg)
Les rotations
50
25 70
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• On vérifie l’équilibre nœud par nœud, en remontant le long du chemin parcouru depuis la racine.
• Un déséquilibre est détecté au nœud 25.
40
42
![Page 57: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/57.jpg)
Les rotations
50
25 70
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• On vérifie l’équilibre nœud par nœud, en remontant le long du chemin parcouru depuis la racine.
• Un déséquilibre est détecté au nœud 25.• Le nœud sous-critique est le nœud 36.
40
![Page 58: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/58.jpg)
Les rotations
50
25 70
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• On constate que l’arbre sous-critique penche dans le même sens que le déséquilibre au nœud critique.
• On aura donc une seule rotation à faire.
40
![Page 59: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/59.jpg)
Les rotations
50
2570
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• On a une seule rotation à faire.
40
![Page 60: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/60.jpg)
Les rotations
50
2570
13
45
85
8
48
28
38
36 60
26
64 9055
62
17
• On a une seule rotation à faire.
40
![Page 61: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/61.jpg)
Les rotations
50
25
70
1345
85
8 48
28
38
36 60
26
64 9055
6217
• On a une seule rotation à faire.
40
![Page 62: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/62.jpg)
Les rotations
50
25
70
13 45
85
848
28
38
3660
26
64 9055
6217
• On a une seule rotation à faire.
40
![Page 63: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/63.jpg)
Les rotations
50
25
70
13
4585
8
4828
38
36
60
26
64 9055
6217
• On a une seule rotation à faire.
40
![Page 64: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/64.jpg)
Les rotations
50
25
70
13
45 85
8
4828
38
36
60
26
64 9055
6217
• On a une seule rotation à faire.
40
![Page 65: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/65.jpg)
Les rotations
50
25
70
13
45 85
8
4828
38
36
60
26
64 9055
6217
• On a une seule rotation à faire.• Nous avons donc rééquilibré l’arbre à partir du nœud
critique que nous avions.• Il reste encore à vérifier l’équilibre pour le reste du chemin
en remontant à la racine, car il pourrait y en avoir d’autres.
40
![Page 66: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/66.jpg)
Les rotations
50
25
70
13
45 85
8
4828
38
36
60
26
64 9055
6217
• On a une seule rotation à faire.• Nous avons donc rééquilibré l’arbre à partir du nœud
critique que nous avions.• Il reste encore à vérifier l’équilibre pour le reste du chemin
en remontant à la racine, car il pourrait y en avoir d’autres.
40
![Page 67: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/67.jpg)
Les rotations
50
25
70
13
45 85
8
4828
38
36
60
26
64 9055
6217
• En l’occurrence, il ne reste qu’à vérifier qu’il n’y a pas de déséquilibre au nœud 50.
40
4 4
![Page 68: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/68.jpg)
Les rotations
50
25
70
13
45 85
8
4828
38
36
60
26
64 9055
6217
• On a une seule rotation à faire.• Nous avons donc rééquilibré l’arbre à partir du nœud
critique que nous avions.• Il reste encore à vérifier l’équilibre pour le reste du chemin
en remontant à la racine, car il pourrait y en avoir d’autres.
40
![Page 69: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/69.jpg)
Implémentation d’une rotationNœud *rotation_gauche(Nœud *racine){
Nœud *nouvelle_racine=racine->droite;
racine->droite = nouvelle_racine->gauche;
nouvelle_racine->gauche = racine;return nouvelle_racine;
}
25
13
458
48
28
38
36
26
17
40
25
13
45
8
4828 38
36
2617 40
![Page 70: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/70.jpg)
Implémentation d’un rééquilibreNœud *reequilibrer_si_necessaire(Nœud *racine){
int diff;if(!racine) return racine;diff = hauteur(racine->droite)-hauteur(racine->gauche);if(diff>1){
Nœud *sous_critique = racine->droite;int diff_sous_critique = hauteur(sous_critique->droite)-hauteur(sous_critique->gauche);if(diff_sous_critique<0) sous_critique = rotation_droite(sous_critique);racine=rotation_gauche(racine);
}else if(diff<-1){
Nœud *sous_critique = racine->gauche;int diff_sous_critique = hauteur(sous_critique->droite)-hauteur(sous_critique->gauche);if(diff_sous_critique>0) sous_critique = rotation_gauche(sous_critique);racine=rotation_droite(racine);
}return racine;
}
![Page 71: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/71.jpg)
Intégration du rééquilibre dans l’algorithme d’ajout
Nœud *ajout(Nœud *racine, float nouvelle_valeur){
if(!racine){
racine = malloc(sizeof(Nœud));racine->gauche=racine->droite=0;racine->valeur = nouvelle_valeur;
}else if(nouvelle_valeur<racine->valeur)
racine->gauche = ajout(racine->gauche,nouvelle_valeur);else if(nouvelle_valeur>racine->valeur)
racine->droite = ajout(racine->droite,nouvelle_valeur);return reequilibrer_si_necessaire(racine);
}
![Page 72: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/72.jpg)
Algorithme de recherche du successeur
• Dans un ensemble ordonné, le successeur d’une valeur est la valeur qui la suit immédiatement dans l’ordre.
• Par exemple, dans l’ensemble ordonné { 3, 6, 7, 12, 17, 18, 22 }, le successeur de 12 est 17, le successeur de 3 est 7, et 22 n’a pas de successeur.
![Page 73: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/73.jpg)
Algorithme de recherche du successeur
• Dans un arbre AVL, le successeur peut être découvert en descendant une fois à droite, puis autant de fois que l’on peut à gauche.
• Par exemple, dans cet arbre-ci, le successeur de 50 est 55.50
25
70
13
45 85
8
4828
38
36
60
26
64 9055
6217 40
![Page 74: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/74.jpg)
Algorithme de recherche du successeur
• Le successeur de 70 est 85. En effet, on descend une fois à droite, et on va à gauche tant et aussi longtemps qu’on le peut, mais ça c’est bien s’il y a un enfant de gauche. Sinon, on a déjà trouvé le successeur.
50
25
70
13
45 85
8
4828
38
36
60
26
64 9055
6217 40
![Page 75: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/75.jpg)
Algorithme de recherche du successeur
• Comment faire pour retrouver le successeur d’un nœud qui n’a pas d’enfant de droite?
• Par exemple, comment faire pour trouver le successeur de 28? 50
25
70
13
45 85
8
4828
38
36
60
26
64 9055
6217 40
![Page 76: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/76.jpg)
Algorithme de recherche du successeur
• Ce qu’il faut faire, dans ce cas, c’est remonter de parent en parent jusqu’à ce que ce soit vers la droite que se trouve le parent.
• Dès que l’on a remonté une fois vers la droite, alors nous avons le successeur.
50
25
70
13
45 85
8
4828
38
36
60
26
64 9055
6217 40
![Page 77: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/77.jpg)
Algorithme de recherche du successeur
• Si, par ce processus, on aboutit à la racine en n’ayant jamais remonté à droite, c’est alors parce que le nœud n’a pas de successeur.
50
25
70
13
45 85
8
4828
38
36
60
26
64 9055
6217 40
![Page 78: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/78.jpg)
Implémentation de l’algorithme de recherche du successeur
Nœud *successeur(Nœud *racine, float valeur){
if(!racine) { ??? (nous aborderons ce cas plus tard) }// Il faut d’abord retrouver le nœud dont on cherche le successeur.if(valeur<racine->valeur) return successeur(racine->gauche,valeur);else if(valeur>racine->valeur) return successeur(racine->droite,valeur);else if(valeur==racine->valeur) // On a trouvé le nœud dont on cherche le successeur.
if(racine->droite) // Cas simple{
Nœud *i=racine->droite; //Une fois à droitewhile(i->gauche) i=i->gauche; // À gauche tant et aussi longtemps
qu’on peut.return i;
}else // Cas compliqué{ // Comment faire quand le nœud dont on cherche le successeur n’a pas d’enfant
de droite? }
}
![Page 79: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/79.jpg)
Implémentation de l’algorithme de recherche du successeur
• Pour résoudre le cas compliqué, l’astuce est la suivante: la fonction récursive retourne tout simplement zéro comme réponse! Cela est pour signifier à l’appelant que cet appel-ci n’a pas été capable de trouver le successeur. Puis, à l’endroit où la fonction fait un appel récursif sur l’enfant de gauche, avant de retourner simplement la réponse reçue, on vérifie si c’est zéro qui a été retourné. Si c’est le cas, alors le successeur est précisément le nœud « racine »!
![Page 80: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/80.jpg)
Implémentation de l’algorithme de recherche du successeur
Nœud *successeur(Nœud *racine, float valeur){
if(!racine) { ??? }if(valeur<racine->valeur){
Nœud *s = successeur(racine->gauche,valeur);if(s==0) return racine; // Ceci résout le cas compliqué!return s;
}else if(valeur>racine->valeur) return successeur(racine->droite,valeur); else if(valeur==racine->valeur) // On a trouvé le nœud dont on cherche le successeur.
if(racine->droite) // Cas simple{
Nœud *i=racine->droite; while(i->gauche) i=i->gauche; return i;
}else return 0; // Cas compliqué: on retourne zéro!
}
![Page 81: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/81.jpg)
Implémentation de l’algorithme de recherche du successeur
• Dans le cas où la valeur dont on cherche le successeur n’est pas présente dans l’arbre, on pourrait avoir comme réflexe de retourner un code d’erreur.
• Par contre, il faut sauter sur l’occasion pour implémenter un algorithme bien plus puissant, puis de retourner quand même le successeur de cette valeur.
• Pour ce faire, il suffit de retourner zéro, et la même ligne de code qui réglait le cas compliqué retournera la bonne valeur pour le cas où la valeur est introuvable.
![Page 82: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/82.jpg)
Implémentation de l’algorithme de recherche du successeur
Nœud *successeur(Nœud *racine, float valeur){
if(!racine) return 0; // Ceci sera résolu de la même façon que le cas compliqué.if(valeur<racine->valeur){
Nœud *s = successeur(racine->gauche,valeur);if(s==0) return racine; // Ceci résout aussi le cas de la valeur absente dans
l’arbre!return s;
}else if(valeur>racine->valeur) return successeur(racine->droite,valeur); else if(valeur==racine->valeur)
if(racine->droite){
Nœud *i=racine->droite; //Une fois à droitewhile(i->gauche) i=i->gauche;return i;
}else return 0;
}
![Page 83: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/83.jpg)
Algorithme du prédécesseur
• Évidemment, pour implémenter l’algorithme de recherche du prédécesseur, il suffit de faire la même chose, mais en inversant gauche et droite.
![Page 84: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/84.jpg)
Algorithme de suppression• Pour supprimer un nœud dans un arbre AVL, il y a deux cas simples et un
cas compliqué:– Premier cas simple: le nœud à supprimer est une feuille.
• Dans ce cas, il suffit de le supprimer directement.– Deuxième cas simple: le nœud à supprimer possède un seul enfant.
• Dans ce cas, il suffit de le supprimer et de le remplacer par son seul enfant.– Cas compliqué: le nœud à supprimer a deux enfants.
• Dans ce cas, il faut d’abord échanger ce nœud avec son successeur, puis le supprimer à son nouvel endroit, ce qui nous mènera nécessairement à l’un des deux cas simples.
• Bien entendu, il faut aussi vérifier les déséquilibres en remontant jusqu’à la racine.
• L’algorithme fonctionne aussi bien si on prend le prédécesseur plutôt que le successeur.
• Étant donné que la nécessité de retrouver le successeur ne survient que dans le cas où le nœud a deux enfants, alors nous sommes nécessairement toujours en présence du cas simple de recherche du successeur! Ainsi, une simple boucle suffit.
![Page 85: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/85.jpg)
Exemple de suppression AVL• Supprimons le nœud 36 de cet arbre-ci.• Il faut d’abord le repérer avec une recherche
conventionnelle à partir de la racine.50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 86: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/86.jpg)
Exemple de suppression AVL• Puis, nous établissons qu’il s’agit d’un cas
compliqué car le nœud à supprimer a deux enfants. 50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 87: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/87.jpg)
Exemple de suppression AVL• Il faut donc d’abord retrouver son successeur à
l’aide d’une boucle simple (une fois à droite, plein de fois à gauche). 50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 88: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/88.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 89: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/89.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 90: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/90.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 91: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/91.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
3660
26
64 9055
6217 40
38
37
![Page 92: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/92.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
3660
26
64 9055
6217 40
38
37
![Page 93: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/93.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 94: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/94.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 95: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/95.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 96: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/96.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 97: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/97.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 98: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/98.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 99: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/99.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 100: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/100.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 101: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/101.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 102: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/102.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 103: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/103.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 104: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/104.jpg)
Exemple de suppression AVL• Puis on l’échange avec.
50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 105: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/105.jpg)
Exemple de suppression AVL• Remarquez que la règle d’ordonnancement
d’arbre binaire de recherche est temporairement enfreinte.50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 106: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/106.jpg)
Exemple de suppression AVL• Ensuite, on continue à descendre
récursivement pour supprimer 36, comme si rien n’était. 50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 107: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/107.jpg)
Exemple de suppression AVL• Puis lorsqu’on retombe sur 36, on arrive
nécessairement à l’un des deux cas simple.50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 108: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/108.jpg)
Exemple de suppression AVL• Dans ce cas-ci, il s’agit du cas avec un seul
enfant. 36 sera donc remplacé par 38.50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 109: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/109.jpg)
Exemple de suppression AVL• Dans ce cas-ci, il s’agit du cas avec un seul
enfant. 36 sera donc remplacé par 38.50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 40
38
37
![Page 110: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/110.jpg)
Exemple de suppression AVL• Dans ce cas-ci, il s’agit du cas avec un seul
enfant. 36 sera donc remplacé par 38.50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 4038
37
![Page 111: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/111.jpg)
Exemple de suppression AVL• Dans ce cas-ci, il s’agit du cas avec un seul
enfant. 36 sera donc remplacé par 38.50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 4038
37
![Page 112: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/112.jpg)
Exemple de suppression AVL• Dans ce cas-ci, il s’agit du cas avec un seul
enfant. 36 sera donc remplacé par 38.50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 4038
37
![Page 113: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/113.jpg)
Exemple de suppression AVL• Dans ce cas-ci, il s’agit du cas avec un seul
enfant. 36 sera donc remplacé par 38.50
25
70
13
45 85
8
4828 39
36
60
26
64 9055
6217 4038
37
![Page 114: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/114.jpg)
Exemple de suppression AVL• Puis le nœud 36 est détruit avec « free ».• Ensuite, il faut remonter jusqu’à la racine pour
vérifier l’équilibre de l’arbre.50
25
70
13
45 85
8
4828 39
60
26
64 9055
6217 4038
37
0 0
![Page 115: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/115.jpg)
Exemple de suppression AVL• Puis le nœud 36 est détruit avec « free ».• Ensuite, il faut remonter jusqu’à la racine pour
vérifier l’équilibre de l’arbre.50
25
70
13
45 85
8
4828 39
60
26
64 9055
6217 4038
37
1 1
![Page 116: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/116.jpg)
Exemple de suppression AVL• Puis le nœud 36 est détruit avec « free ».• Ensuite, il faut remonter jusqu’à la racine pour
vérifier l’équilibre de l’arbre.50
25
70
13
45 85
8
4828 39
60
26
64 9055
6217 4038
37
2 1
![Page 117: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/117.jpg)
Exemple de suppression AVL• Puis le nœud 36 est détruit avec « free ».• Ensuite, il faut remonter jusqu’à la racine pour
vérifier l’équilibre de l’arbre.50
25
70
13
45 85
8
4828 39
60
26
64 9055
6217 4038
373 3
![Page 118: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/118.jpg)
Exemple de suppression AVL• Puis le nœud 36 est détruit avec « free ».• Ensuite, il faut remonter jusqu’à la racine pour
vérifier l’équilibre de l’arbre.50
25
70
13
45 85
8
4828 39
60
26
64 9055
6217 4038
37
4 4
![Page 119: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/119.jpg)
Les parcours d’arbre• Parcours symétrique (donne les nœuds en ordre croissant):
– Gauche, racine, droite.• Parcours anti-symétrique (donne les nœuds en ordre
décroissant):– Droite, racine, gauche.
• Parcours par priorité aux pères (aucune interprétation simple):– Racine, gauche, droite (ou racine, droite, gauche).
• Parcours par priorité aux fils (aucune interprétation simple):– Gauche, droite, racine (ou droite, gauche, racine).
• Parcours rangée par rangée:– Ne peut pas s’implémenter par une fonction récursive simple. On
doit l’implémenter comme un parcours de graphe par largeur, donc avec une file.
![Page 120: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/120.jpg)
Implémentation de parcours d’arbrevoid parcours_symétrique(Nœud *racine){
if(!racine) return;parcours_symétrique(racine->gauche);traitement(racine); // Traitement quelconque.parcours_symétrique(racine->droite);
}void parcours_anti_symétrique(Nœud *racine){
if(!racine) return;parcours_anti_symétrique(racine->droite);traitement(racine);
parcours_anti_symétrique(racine->gauche);}
void parcours_par_priorite_aux_peres(Nœud *racine){
if(!racine) return;traitement(racine);parcours_par_priorite_aux_peres (racine->gauche); // Ça pourrait être droite avant gauche.parcours_par_priorite_aux_peres (racine->droite);
}void parcours_par_priorite_aux_fils(Nœud *racine){
if(!racine) return;parcours_par_priorite_aux_fils (racine->gauche); // Ça pourrait être droite avant gauche.parcours_par_priorite_aux_fils (racine->droite);traitement(racine);
}
![Page 121: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/121.jpg)
Traces de parcours d’arbre
• Soit cet arbre-ci:
50
25
70
13
45 85
8
4828 39
60
26
64 9055
6217 4038
37
![Page 122: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/122.jpg)
Traces de parcours d’arbre
• Parcours symétrique: 8, 13, 17, 25, 26, 28, 37, 38, 39, 40, 45, 48, 50, 55, 60, 62, 64, 70, 85, 90.
50
25
70
13
45 85
8
4828 39
60
26
64 9055
6217 4038
37
![Page 123: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/123.jpg)
Traces de parcours d’arbre
• Parcours anti-symétrique: 90, 85, 70, 64, 62, 60, 55, 50, 48, 45, 40, 39, 38, 37, 28, 26, 25, 17, 13, 8.
50
25
70
13
45 85
8
4828 39
60
26
64 9055
6217 4038
37
![Page 124: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/124.jpg)
Traces de parcours d’arbre• Parcours par priorité aux pères (gauche avant
droite): 50, 37, 25, 13, 8, 17, 28, 26, 45, 39, 38, 40, 48, 70, 60, 55, 64, 62, 85, 90.
50
25
70
13
45 85
8
4828 39
60
26
64 9055
6217 4038
37
![Page 125: IFT-2000: Structures de Données Les arbres. Arbre Un arbre est une structure dans laquelle on a un nœud qui est une racine, puis chaque nœud a zéro, un](https://reader035.vdocuments.pub/reader035/viewer/2022062622/551d9da2497959293b8d252b/html5/thumbnails/125.jpg)
Traces de parcours d’arbre• Parcours par priorité aux fils (gauche avant
droite): 8, 17, 13, 26, 28, 25, 38, 40, 39, 48, 45, 37, 55, 62, 64, 60, 90, 85, 70, 50.
50
25
70
13
45 85
8
4828 39
60
26
64 9055
6217 4038
37