Algorithmique Cours 9 - Arbres
Transcript of Algorithmique Cours 9 - Arbres
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 1/89
Algorithmique :
structure des donnéesFrançois Lambert
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 2/89
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 3/89
● Definition informelle
● Un arbre est un ensemble de sommets tel que :
✓ il existe un sommet unique appele racine qui n’a pas de pere
✓ tous les autres sommets sont atteints a partir de la racine, par une
branche unique
● Definition recursive
● Un arbre est constitue de
✓
une racine✓ une liste d’arbres disjoints A1, ..., An (sous arbres)
Un sommet de l’arbre est la racine d’un sous-arbre
Structures arborescentes
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 4/89
Représentation graphique d’un arbre
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 5/89
● Représentation
● de l’organisation de fichiers informatiques
● d’une expression arithmétique
Exemple d’utilisation graphique des arbres
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 6/89
● Représentation
● de mots, de phrases (en linguistique)
● arbre de dérivation en analyse syntaxique
arbre de aabbabab avec
S -> aSbε
S -> ε
Exemple d’utilisation graphique des arbres
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 7/89
● Représentation
● arbre généalogique
● arbre de tournoi
Exemple d’utilisation graphique des arbres
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 8/89
● Se prêtent bien aux algorithmes récursifs
Particularité des arbres
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 9/89
● nœud = sommet
● pere d’un sommet :
● le predecesseur d’un sommet
● fils d’un sommet
● les successeurs d’un sommet
● freres● des sommets qui ont le meme pere
● racine
● nœud sans pere
● feuille :
● nœud sans fils
● branche
● chemin entre 2 nœuds
Terminologie
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 10/89
● Niveau (profondeur) d’un nœud
● la longueur de la branche depuis la racine
● Hauteur d’un nœud
● la longueur de la plus longue branche de ce nœud jusqu’a une
feuille
● Hauteur d’un arbre
● la hauteur de la racine
● Taille d’un arbre
● nombre de ses sommets
Terminologie
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 11/89
Arbres binaires
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 12/89
● Definition informelle
● Dans un arbre binaire, tout nœud a au plus deux fils
● Un arbre binaire possede exactement deux sous-arbres
(eventuellement vides)
● Definition recursive● un arbre binaire est
✓ soit vide
✓ soit composé
● d’une racine
● de deux sous-arbres binaires ABG et ABD disjoints
» ABG : sous Arbre Binaire Gauche
» ABD : sous Arbre Binaire Droit
Arbre binaire
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 13/89
● Arbre binaire dégénéré, filiforme
● chaque noeud possède exactement un fils
-> à éviter
Arbres binaires particuliers
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 14/89
● Arbre binaire parfait (complet)
● chaque niveau est complètement rempli
● Tout sommet est soit une feuille au dernier niveau, soit possède
exactement deux fils
Arbres binaires particuliers
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 15/89
● Arbre binaire presque parfait
● Tous les niveaux sont complètement remplis sauf éventuellement
le dernier et dans ce cas les feuilles sont le plus a gauche
possible
Arbres binaires particuliers
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 16/89
● Arbre binaire équilibré
● la différence de hauteur entre deux frère ne peut dépasser 1
Arbres binaires particuliers
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 17/89
● Dans un arbre binaire de recherche● nœud racine contient un element X
● dans ABG : les nœuds sont ≤ X● dans ABD : les nœuds sont > X
Arbres binaires de recherche (ABR)
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 18/89
Exemple d’arbre binaire de recherche
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 19/89
Exemple d’arbre binaire de recherche
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 20/89
Exemple d’arbre binaire de recherche
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 21/89
● Un arbre binaire de recherche est equilibre si la difference de hauteurentre 2 freres ne depasse pas 1
● Du nom des 2 inventeurs (Adelson-Velsky et Landis, 1962)
Arbre binaire de recherche équilibré (AVL)
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 22/89
Implémentation
des arbres binaires
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 23/89
● Implementation du TDA ARBRE (binaire)● par cellules chaınees
● par cellules contigues● par curseurs (faux pointeurs)
● realisation des arbres parfaits
Implémentation des arbres binaires
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 24/89
● Un arbre binaire est soit :● un pointeur sur le nœud racine (arbre non vide)
● le pointeur NULL
● Un nœud est une structure a trois champs :
● une etiquette, valeur (element)
● le sous-arbre gauche
● le sous-arbre droit
● Definition recursive la plus simple a programmer
Implémentation par cellules chaînées
é î é
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 25/89
typedef struct nœud {
ELEMENT etiq; // etiquettestruct nœud *ag; // ABG : fils gauche
struct nœud *ad; // ABD : fils droit
} NOEUD
typedef NŒUD *ARBRE
#define ARBRE_VIDE NULL
Implémentation par cellules chaînées
I lé t ti ll l h î é
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 26/89
Implémentation par cellules chaînées
I lé t ti ll l ti ü
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 27/89
● Un arbre est une structure a deux champs
● un tableau ou sont memorises les nœuds
● un entier qui donne l’indice de la racine dans le tableau
● Un nœud est une structure a trois champs
● l’etiquette du nœud
● Les indices de ses fils gauche et droit (ou 0 si pas de fils)
Implémentation par cellules contigües
I lé t ti ll l ti ü
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 28/89
Implémentation par cellules contigües
typedef struct noeud {
ELEMENT etiq ; /* etiquette */int fg; // fils gauche
int fd; // fils droit
} NOEUD;
typedef struct {NOEUD tab [TAILLE_MAX ] ;
int racine
} rep;
typedef rep * ARBRE;
I lé t ti ll l ti ü
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 29/89
Implémentation par cellules contigües
I lé t ti (f i t )
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 30/89
Implémentation par curseurs (faux pointeurs)
● Meme principe que les faux pointeurs dans le TDA Liste :● simulation de la memoire : les nœuds sont dans un tableau en
variable globale
● Un arbre = indice de la racine (0 si vide)
● Un nœud est une structure a trois champs :
● l’etiquette du nœud● l’indice du fils gauche (ou 0 si il est vide)
● l’indice du fils droit (ou 0 si il est vide)
● Gestion des cellules disponibles● marquer les cellules libres et parcourir le tableau pour trouver la
premiere place libre
Implémentation par c rse rs (fa pointe rs)
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 31/89
Implémentation par curseurs (faux pointeurs)
Cas particulier des arbres parfaits
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 32/89
Cas particulier des arbres parfaits
● Solution efficace (acces + place memoire) de realisation d’un arbreparfait A de N etiquettes :
● Un tableau T avec
● T[1] : racine de A
● T[i] : etiquette du pere
● T[2i] : etiquette du fils gauche
● T[2i+1] : etiquette du fils droit
Cas particulier des arbres parfaits
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 33/89
● Si A est larbre parfait suivant :
● Alors la réalisation de A est le tableau :
Cas particulier des arbres parfaits
d b f c a e g
0 1 2 3 4 5 6 7
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 34/89
Manipulation
des arbres binaires
Opérations sur les arbres
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 35/89
● Calcul de la hauteur
● Calcul du nombre de noeuds, du nombre de feuilles
● Recherche d’un élément
● Insertion d’un élément
● Suppression d’un élément
● Parcours
Opérations sur les arbres
Primitives des arbres binaires
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 36/89
● ArbreVide(ARBRE A)● indique si un arbre est vide ou non
● ARBRE FilsGauche(ARBRE A)
● renvoie le fils gauche de l’arbre A
● ARBRE FilsDroit(ARBRE A)
● renvoie le fils droit de l’arbre A
● ARBRE EstFeuille(ARBRE A)
● indique si l’arbre A est une feuille
● ARBRE ArbreCreer()
● cree et renvoie un arbre
Primitives des arbres binaires
Primitives des arbres binaires
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 37/89
● ELEMENT ValeurRacine(ARBRE A)● renvoie l’etiquette de la racine de l’arbre A
● ArbreDetruire(ARBRE A)
● detruit un arbre A
Primitives des arbres binaires
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 38/89
Parcours d’arbres binaires
Parcours d’un arbre
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 39/89
● Parcours d’un arbre : parcours de tous les nœuds avec
éventuellement l’application d’une fonction (traitement).
● Le parcours se fait selon un certain ordre
● Parcours en profondeur
✓ un parcours est dit «en profondeur » si, lorsque l’arbre n’est pas
vide, le parcours de l’un des deux sous-arbres ne commence que
lorsque le parcours de l’autre est terminé
✓ Il existe 3 types de parcours en profondeur : prefixe, infixe ou
postfixe
● Parcours en largeur
✓ un parcours est dit « en largeur » lorsqu’a partir d’un sommet S, les
freres de S sont explores avant les fils de S.
Parcours d un arbre
Parcours en profondeur
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 40/89
● Parcours en profondeur de gauche a droite (le parcours droite-gauche se deduit par symetrie)
● Prefixe (Racine / Gauche / Droit)
✓ traitement de la racine
✓ parcours prefixe du sous-arbre gauche
✓ parcours prefixe du sous-arbre droit
● Infixe ou symetrique (Gauche / Racine / Droit)✓ parcours infixe du sous-arbre gauche
✓ traitement de la racine
✓ parcours infixe du sous-arbre droit
● Postfixe ou suffixe (Gauche / Droit / Racine)
✓ parcours suffixe du sous-arbre gauche
✓ parcours suffixe du sous-arbre droit
✓ traitement de la racine
Parcours en profondeur
Parcours en profondeur
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 41/89
● Pour l’arbre
● Les ordres de traitement des noeuds sont, selon les parcours
Parcours en profondeur
Parcours préfixe
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 42/89
● parcours Racine / Gauche / Droit : le nœud racine est traite au premierpassage avant le parcours des sous-arbres
● Algrithme :
Parcours(ARBRE A) DEBUT
Si non(ArbreVide(A)) ALORS
traitement(ValeurRacine(A))
Parcours(FilsGauche(A))Parcours(FilsDroit(A))
FINSI
FIN
Parcours préfixe
Parcours infixe
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 43/89
● parcours Gauche / Racine / Droit : le nœud racine est traite apres leparcours du sous-arbre gauche et avant le parcours du sous-arbre
droit
● Algorithme :
Parcours(ARBRE A) DEBUT
Si non(ArbreVide(A)) ALORS
Parcours(FilsGauche(A))traitement(ValeurRacine(A))
Parcours(FilsDroit(A))
FINSI
FIN
Parcours infixe
Parcours infixe et arbre binaire de recherche
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 44/89
● Un arbre binaire est un arbre binaire de recherche si et seulement si laliste des valeurs des nœuds etablie dans l’ordre infixe est croissante
● Exemple
● l’arbre suivant est un ABR. La liste des valeurs des nœuds etablie
dans l’ordre infixe est croissante : {2, 4, 7, 12, 20}
Parcours infixe et arbre binaire de recherche
Parcours suffixe
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 45/89
● parcours Gauche / Droit / Racine : le nœud racine est traite apres lesparcours des sous-arbre gauche et droit
● Algorithme :
Parcours(ARBRE A) DEBUT
Si non(ArbreVide(A)) ALORS
Parcours(FilsGauche(A))
Parcours(FilsDroit(A))
traitement(ValeurRacine(A))
FINSI
FIN
Parcours suffixe
Parcours en largeur
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 46/89
● un parcours est dit « en largeur » lorsqu’a partir d’un sommet S, lesfreres de S sont explores avant les fils de S.
● Idee : utiliser une file pour enfiler les sommets a traiter
Parcours en largeur
Parcours en largeur : algorithme
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 47/89
ParcoursLargeur(ARBRE A)F: une file d’attente
DEBUTCreer la file FSi non(ArbreVide(A)) ALORS
Enfiler A dans FTANT QUE non(FileVide(F)) FAIRE
A = Defiler(F)traitement(ValeurRacine(A))SI non(ArbreVide(FilsGauche(A)) ALORS
Enfiler FilsGauche(A) dans FFINSI
SI non(ArbreVide(FilsDroit(A)) ALORSEnfiler FilsDroit(A) dans FFINSI
FINTANTQUEFINSIDetruire F
FIN
g g
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 48/89
Opérations sur les arbres
binaires de recherche
Opérations des arbres binaires de recherche
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 49/89
● Recherche d’un élément
● Insertion d’un élément
● Suppression d’un élément
p
Primitives des arbres binaires de recherche
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 50/89
● ABRVide(ABR A)● indique si un ABR A est vide ou non
● ABR ABG(ABR A)
● renvoie le fils gauche de ABR A
● ABR ABD(ABR A)
● renvoie le fils droit de l’ABR A
● ABR EstFeuille(ABR A)
● indique si l’arbre A est une feuille
● ABR ABRCreer()● cree et renvoie un ABR
Primitives des arbres binaires de recherche
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 51/89
● ELEMENT ValeurRacine(ABR A)● renvoie l’etiquette de la racine de l’ABR A
● ABRDetruire(ABR A)
● detruit un ABR A
Recherche d’un élément dan sun ABR
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 52/89
ABRRechercher(ELEMENT e, ABR A)
DEBUT
si ABRVide(A) alors
renvoyer FAUX
sinon si e = ValeurRacine(A) alors
renvoyer VRAIsinon si e < ValeurRacine(A) alors
renvoyer (ABRRechercher(e, ABG(A))
sinon
renvoyer (ABRRechercher(e, ABD(A))
FIN
→ Complexite : O(Hauteur(A))
Construction d’un arbre
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 53/89
● Un arbre A se construit par insertions successives d’elements x
● 2 methodes principales :● insertion aux feuilles
✓ ajout de chaque element e a une feuille de A
● insertion a la racine
✓ L’element e devient la nouvelle racine A
Insertion d’une feuille
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 54/89
ABRInsererFeuille(ELEMENT X, ABR A)
DEBUT
Si ABRVide(A) Alors
étiquette de A ← X
ABG(A) ← ABR_VIDE
ABD(A) ← ABR_VIDE
SinonSi X <= ValeurRacine(A) Alors
ArbreInsererFeuille(X, ABG(A))
Sinon
ArbreInsererFeuille(X, ABD(A))
FIN
Insertion à la racine
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 55/89
● L’element « X » a ajouter devient la nouvelle racine.
● Il est necessaire de separer l’ancien ABR en 2 sous-arbres● le sous-arbre gauche de la racine et qui contiendra des valeurs
inferieures ou egales a l’element X
● le sous-arbre droit de la racine qui contiendra des valeurs
strictement superieures a X
Insertion à la racine
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 56/89
● 2 etapes
● couper l’arbre en 2 sous-arbres gauche et droit selon les regles ci-
dessus✓ G contient tous les elements de A ≤ X
✓ D contient tous les elements de A > X
● former un nouvel ABR A’ avec :
✓ etiquette de A’ : X
✓ fils gauche de A’ : G
✓ fils droit de A’ : D
Méthodes de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 57/89
● Coupure d’un element X dans un ARBRE A
● il n’est pas necessaire de parcourir tous les nœuds de A,
seulement les nœuds N situes sur le chemin de recherche de Xdans A
✓ Si nœud N ≤ X : on ajoute le nœud N et ABG(N) dans G
✓ Si nœud N > X : on ajoute le nœud N et ABD(N) dans D
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 58/89
● Soit l’arbre ci-dessous, on souhaite inserer l’element ‘f’ a la racine de
l’arbre
● Nœuds parcourus (chemin de recherche de ‘f’) : q, d, i, e, g
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 59/89
● N vaut ‘q’ et N > X car ‘q’ > ‘f’ : ajout de N et son fils droit a D
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 60/89
● N vaut ‘q’ et N > X car ‘q’ > ‘f’ : ajout de N et son fils droit a D
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 61/89
● N vaut ‘q’ et N > X car ‘q’ > ‘f’ : ajout de N et son fils droit a D
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 62/89
● N vaut ‘d’ et N <= X car ‘d’ <= ‘f’ : ajout de N et son fils gauche a G
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 63/89
● N vaut ‘d’ et N <= X car ‘d’ <= ‘f’ : ajout de N et son fils gauche a G
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 64/89
● N vaut ‘d’ et N <= X car ‘d’ <= ‘f’ : ajout de N et son fils gauche a G
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 65/89
● N vaut ‘i’ et N > X car ‘i’ > ‘f’ : ajout de N et son fils droit a D
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 66/89
● N vaut ‘i’ et N > X car ‘i’ > ‘f’ : ajout de N et son fils droit a D
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 67/89
● N vaut ‘i’ et N > X car ‘i’ > ‘f’ : ajout de N et son fils droit a D
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 68/89
● N vaut ‘e’ et N <= X car ‘e’ <= ‘f’ : ajout de N et son fils gauche a G
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 69/89
● N vaut ‘e’ et N <= X car ‘e’ <= ‘f’ : ajout de N et son fils gauche a G
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 70/89
● N vaut ‘e’ et N > X car ‘g’ > ‘f’ : ajout de N et son fils droit a D
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 71/89
● N vaut ‘e’ et N > X car ‘g’ > ‘f’ : ajout de N et son fils droit a D
Exemple de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 72/89
● N vaut ‘e’ et N > X car ‘g’ > ‘f’ : ajout de N et son fils droit a D
Procédure de coupure
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 73/89
● Coupure de A en 2 ABR G et D
Coupure (ELEMENT X, ABR A, ABR G , ABR D )
DébutSi ABRVide(A) ALORS
G ← ABR_VIDE
D ← ABR_VIDE
SINONSI X <= ValeurRacine(A) ALORS
D ← A
Coupure ( X, ABG(A) , G, ABG(D) )
SINON
G←ACoupure ( X, ABD(A) , ABD(G) , D)
FSI
FSI
Fin
Insertion à la racine
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 74/89
● Ajout d’un element X a la racine de l’arbre A
ABRInsererRacine(ELEMENT X, ABR A)
ABR RDébut
etiquette de R ← X
ABG(R) ← ABR_VIDE
ABD(R) ) ← ABR_VIDE
Coupure (X, A, ABG(R) , ABD(R) )
A ← R
Fin
Suppression d’un élément
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 75/89
● Pour supprimer un element X dans A, il faut :● determiner la place de X dans A : nœud N
● supprimer X et reorganiser les elements de A. 3 cas possibles :
1. N a 0 fils (X = ValeurRacine(N)) : suppression immediate2. N a 1 fils : on remplace N par ce fils
3. N a 2 fils : 2 solutions
● remplacer X par l’element qui lui est immediatement inferieur :
le MAX dans ABG(N)● remplacer X par l’element qui lui est immediatement superieur :
le MIN dans ABD(N)
Suppression d’un élément
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 76/89
● Pour supprimer un element X dans A, il faut :● determiner la place de X dans A : nœud N
● supprimer X et reorganiser les elements de A. 3 cas possibles :
1. N a 0 fils (X = ValeurRacine(N)) : suppression immediate2. N a 1 fils : on remplace N par ce fils
3. N a 2 fils : 2 solutions
● remplacer X par l’element qui lui est immediatement inferieur :
le MAX dans ABG(N)● remplacer X par l’element qui lui est immediatement superieur :
le MIN dans ABD(N)
Suppression d’un élément
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 77/89
● Pour supprimer un element X dans A, il faut :● determiner la place de X dans A : nœud N
● supprimer X et reorganiser les elements de A. 3 cas possibles :
1. N a 0 fils (X = ValeurRacine(N)) : suppression immediate
Suppression d’un élément
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 78/89
● Pour supprimer un element X dans A, il faut :● determiner la place de X dans A : nœud N
● supprimer X et reorganiser les elements de A. 3 cas possibles :
2. N a 1 fils : on remplace X par ce fils
Suppression d’un élément
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 79/89
● Pour supprimer un element X dans A, il faut :● determiner la place de X dans A : nœud N
● supprimer X et reorganiser les elements de A. 3 cas possibles :
2. N a 1 fils : on remplace N par ce fils
Suppression d’un élément
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 80/89
● Pour supprimer un element X dans A, il faut :● determiner la place de X dans A : nœud N
● supprimer X et reorganiser les elements de A. 3 cas possibles :
2. N a 1 fils : on remplace N par ce fils
Suppression d’un élément
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 81/89
● Pour supprimer un element X dans A, il faut :● determiner la place de X dans A : nœud N
● supprimer X et reorganiser les elements de A. 3 cas possibles :
3. N a 2 fils : 2 solutions● remplacer X par l’element qui lui est immediatement inferieur : le MAX
dans ABG(N)● remplacer X par l’element qui lui est immediatement superieur : le MIN
dans ABD(N)
Suppression d’un élément
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 82/89
● Pour supprimer un element X dans A, il faut :
● determiner la place de X dans A : nœud N
● supprimer X et reorganiser les elements de A. 3 cas possibles :3. N a 2 fils : 2 solutions
● remplacer X par l’element qui lui est immédiatement inferieur : le
MAX dans ABG(N)
Suppression d’un élément
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 83/89
● Pour supprimer un element X dans A, il faut :● determiner la place de X dans A : nœud N
● supprimer X et reorganiser les elements de A. 3 cas possibles :
3. N a 2 fils : 2 solutions● remplacer X par l’element qui lui est immediatement inferieur : le
MAX dans ABG(N)
Suppression d’un élément
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 84/89
● Pour supprimer un element X dans A, il faut :● determiner la place de X dans A : nœud N
● supprimer X et reorganiser les elements de A. 3 cas possibles :
3. N a 2 fils : 2 solutions● remplacer X par l’element qui lui est immediatement inferieur : le
MAX dans ABG(N)
Suppression d’un élément
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 85/89
● Pour supprimer un element X dans A, il faut :● determiner la place de X dans A : nœud N
● supprimer X et reorganiser les elements de A. 3 cas possibles :
3. N a 2 fils : 2 solutions■ remplacer X par l’element qui lui est immediatement inferieur : le
MAX dans ABG(N)
Suppression d’un élément
P i l X d A il f
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 86/89
● Pour supprimer un element X dans A, il faut :● determiner la place de X dans A : nœud N
● supprimer X et reorganiser les elements de A. 3 cas possibles :
3. N a 2 fils : 2 solutionsremplacer X par l’element qui lui est immediatement inferieur : le MAX
dans ABG(N) :on cree une fonction qui renvoie et supprime le MAX d’un ABR, c’est-a-dire l’element le plus a droite.
ELEMENT SupprimerMax (ABR A)Début
SI ABRVide(ABD(A)) ALORSELEMENT racine ← ValeurRacine(A) A ← ABG(A)renvoyer racine
SINONSupprimerMax (ABD(A) )
FINSI
Fin
Suppression d’un élément
ABRS i (ELEMENT X ABR A)
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 87/89
ABRSupprimer(ELEMENT X, ABR A)Début
SI non ABRVide(A) ALORSSI X < ValeurRacine(A) ALORS
ABRSupprimer(X, ABG(A) )SINON
SI X > ValeurRacine(A) ALORSABRSupprimer (X, ABD(A) )
SINON /* On a trouve l’element */SI ABRVide(ABG(A)) ALORS
A ← ABD(A) /* 0 ou 1 fils : le fils droit*/SINON
SI EstVide(ABD(A)) ALORSA ← ABG(A) /* 1 fils : le fils gauche */
SINON /* 2 fils */
Etiquette de A ← SupprimerMax (ABG(A))FSIFSI
FSIFSI
FSI
FIN
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 88/89
Propriétés des arbres binaires
Propriétés des arbres binaires
P i t
8/10/2019 Algorithmique Cours 9 - Arbres
http://slidepdf.com/reader/full/algorithmique-cours-9-arbres 89/89
● Proprietes
● un arbre binaire ayant n sommets a une hauteur h qui verifie
log2(n+1) – 1 ≤ h(a) ≤ n – 1● un arbre binaire de hauteur h a un nombre de sommets n qui verifie
h + 1 ≤ n ≤ 2h+1 -1
● Mesure de complexite● parcours de chaque nœud de l’arbre : en O(n)
● parcours d’une branche : complexite dans le pire des cas en O(h) = O(log
(n))
● Objectif
● avoir h minimum (arbre complet ou presque ou equilibre)