Cours ASDII
Cours ASDII
Cours ASDII
Farah HARRATHI
Maître Assistant en Informatique
E-mail : harrathi.farah@gmail.com
-i-
Préface
Préface
Objectifs du cours :
-ii-
Préface
-iii-
Table des matières
-iv-
Table des matières
-v-
Table des matières
-vi-
Table des figures
-vii-
1.1. Introduction
Chapitre 1
1.1. Introduction
L'élément de base d'une liste chaînée s'appelle le maillon. Il est constitué : d’un
champ de données et d'un pointeur vers un maillon.
Données
pointeur
Le champ pointeur vers un maillon pointe vers le maillon suivant de la liste. S'il
n'y a pas de maillon suivant, le pointeur vaut NIL.
Dans une liste chaînée, chaque élément pointe, à l'aide d’un pointeur (suivant)
vers l'élément suivant dans la liste ; le dernier élément, par définition, n'a pas de
suivant, donc son pointeur suivant vaut nil.
-8-
1.4. Implémentation du type liste chaînée
premier
Pour manipuler une liste chaînée, nous manipulons un pointeur sur le premier
élément; comme chaque élément « connaît » l'élément suivant, on peut ainsi
accéder à tous les éléments de la liste. Notons enfin que si le pointeur premier vaut
nil, on considérera naturellement que la liste est vide (elle ne contient aucun
élément).
Le premier maillon de la liste est appelé tête, le dernier maillon de la liste est
appelé queue.
Une fois le type liste est défini on peut déclarer une variable de type pointeur
sur liste de la manière suivante :
p : ^liste
Si p est un pointeur sur une variable de type liste, p^ est la variable pointée par
p. Cette variable est un enregistrement, pour accéder à ses champs on utilise
l’opérateur "." .
p^. valeur
-9-
1.5. Insertion d’une valeur en tête d’une liste
p^. suivant
Une liste est vide si le pointeur du premier maillon est vaut nil.
pNil
Ecrire la procédure InserTete qui permet d’insérer une valeur val en tête d’une
liste chaînée donnée par l’adresse de son premier élément (premier).
Notons qu’après l’insertion la valeur du premier sera changée, donc le passage
doit se faire par adresse.
premier
premier
val
Principe
-10-
1.6. Récupérer l’adresse du dernier élément d’une liste
Algorithme
Ecrire la procédure Dernier qui renvoie l’adresse du dernier élément d’une liste
donnée par l’adresse de son premier élément (premier).
premier
Dernier
Principe
Le dernier élément de la liste s’il existe est un maillon qui ne possède pas de
suivant. On fait le parcours de liste du premier élément jusqu’à trouver un maillon
dont le suivant vaut nil. L’adresse de ce maillon est renvoyée par la fonction.
Algorithme
-11-
1.7. Insertion d’une valeur en queue d’une liste
Ecrire la procédure InsertQueue qui permet d’insérer une valeur val dans une
liste chaînée donnée par l’adresse de son premier élément (premier).
Notons qu’après l’insertion la valeur du premier peut changer (dans le cas où la
liste est vide) donc le passage doit se faire par adresse.
premier
premier
val
Principe
Deux cas:
1. Si la liste est vide l’insertion en queue est une insertion en tête.
si(premier =Nil) alors
InsertTete(p,val)
2. Sinon
créer un maillon d’adresse p1 contenant la valeur v et dont l’élément
suivant est Nil
sinon
p1nouveau(^liste)
p1^.valeurval
p1^.suivantNil
Récupérer l’adresse du dernier maillon (Der) et p1 devient le suivant de
Der
Der dernier(premier)
-12-
1.8. Longueur d’une liste
Der^.suivantp1
Finsi
Algorithme
Principe
-13-
1.9. Insertion d’une valeur à une position k dans une liste
Ecrire la procédure Insertk qui permet d’insérer une valeur val à une position k
dans une liste chaînée donnée par l’adresse de son premier élément (premier). La
valeur val aura le rang k+1 dans la liste après l’insertion.
Notons qu’après l’insertion la valeur du premier peut changer (dans le cas où
k=0) donc le passage doit se faire par adresse.
premier
premier
val
pk
Principe
Sinon
- Récupérer l’adresse du maillon qui se trouve à la position k (pk).
sinon
pour i de 1 a k faire
pkpk^.suivant;
-14-
1.10. Suppression du premier maillon d’une liste
finpour
Algorithme
-15-
1.10. Suppression du premier maillon d’une liste
premier
premier
Principe
Algorithme
-16-
1.11. Suppression du dernier maillon d’une liste
premier
AvDer
premier
Principe
-17-
1.12. Suppression de tous les maillons d’une liste
AvDer ^.suivantNil
on libère la zone mémoire d’adresse p.
liberer(p)
finsi
Algorithme
Ecrire la procédure SuppListe qui permet de supprimer tous les éléments d’une
liste chaînée donnée par l’adresse de son premier élément (premier).
Notons qu’après la suppression la valeur du premier vaut nil, donc le passage
doit se faire par adresse.
Algorithme
Une liste où le pointeur nil du dernier élément est remplacé par l’adresse du
premier élément est appelée liste circulaire.
Dans une liste circulaire tous les maillons sont accessibles à partir de n’importe
quel autre maillon. Une liste circulaire n’a pas de premier et de dernier maillon.
-18-
1.14. Les listes doublement chaînée
liste
Dans une liste doublement chaînée un maillon est composé de trois champs :
un champ de données ;
un pointeur vers un le maillon suivant.
un pointeur vers un le maillon précédent.
Données
Précédent suivant
-19-
1.14. Les listes doublement chaînée
premier
Ecrire la procédure InserTete qui permet d’insérer une valeur v en tête d’une
liste doublement chaînée donnée par l’adresse de son premier élément (premier).
Notons qu’après l’insertion la valeur du premier sera changée donc le passage
doit se faire par adresse.
Principe
Algorithme
-20-
1.15. Suppression du premier maillon d’une liste doublement chaînée
p1nouveau(^liste)
p1^.valeurv
p1^.precedentNil
p1^.suivantp
si(p<>nil) alors
p^.precedenttp1
Finsi
pp1
Fin
Principe
Deux cas:
1) Si la liste est vide l’insertion en queue est une insertion en tête.
si(p=Nil) alors
InsertTete(p,v)
2) Sinon
créer un maillon d’adresse p1 contenant la valeur v et dont l’élément
suivant est Nil
p1nouveau(^liste)
p1^.valeurv
p1^.suivantNil
Récupérer l’adresse du dernier maillon Der, p1 devient le suivant de
Der et Der devient le précédent de p1
Der dernier(p)
Der^.suivantp1
p1^.precedentDer
Finsi
Algorithme
-21-
1.15. Suppression du premier maillon d’une liste doublement chaînée
variable
p1,Der : ^listedc
Debut
si(p=Nil) alors
InsertTete(p,v)
Sinon
P1nouveau(^listedc)
P1^.valeurv
p1^.suivantNil// il sera le dernier
Der dernier(p)
Der^.suivantp1
p1^.precedentDer
Finsi
Fin
-22-
2.1. Définition et exemple
Chapitre 2
Les piles
Une pile est une liste ordonnée sans fin d’éléments dans laquelle on ne peut
introduire ou enlever un élément qu'à une extrémité appelée tête de pile ou
sommet de pile.
Exemple
L’implantation d’une pile par une liste (simplement) chaînée est une version
simplifiée de celle d’une liste par liste chaînée.
-23-
2.4. Les opérations sur une pile
Type Pile=enregistrement
ListeElem : ^liste
finenregistrement
-24-
2.5. Une application des piles : le calcul arithmétique
Exemple
-25-
2.5. Une application des piles : le calcul arithmétique
-26-
3.1. Définition
Chapitre 3
Les files
3.1. Définition
Une file est une structure de données dynamique dans laquelle on insère des
nouveaux éléments à la fin (queue) et on enlève des éléments au début (tête de
file) (REBAINE, 1, 2009).
Exemple
A B C
Tete Fin
Noter qu’en principe, il n’y aucune limite aux nombres d’éléments que l’on peut
ajouter dans une file.
L’opération e Defiler (f), retire (supprime) un élément de la fin de la file et
renvoie sa valeur dans e.
Ainsi l’opération e Defiler (f) provoque un changement d’état de la et met
l’élément A dans e.
-27-
3.3. Implantation d’une file par liste chaînée
B C
Tete Fin
L'opération Defiler ne peut s’effectuer sur une file vide. Il faudra donc utiliser
une opération FileVide qui permet de tester si une file est vide ou pas.
Le résultat des opérations Enfiler (f, D) et Enfiler (f, E) est donné par la figure
précédente.
B C D E
Tete Fin
L’implantation d’une pile par une liste (simplement) chaînée est une version
simplifiée de celle d’une liste par liste chaînée.
Type File=enregistrement
ListeElem : ^liste
finenregistrement
-28-
3.4. Les opérations sur une file
-29-
4.1. Introduction
Chapitre 4
Les arbres
4.1. Introduction
Exemples :
-30-
4.2. Terminologie de base et définitions
-31-
4.3. Parcours d’arbres
Chemin : Si n1, n2, .., nk, sont des nœuds d’un arbre et que ni est le parent de
ni+1 pour 1 ≤ i ≤ k, cette suite est appelée chemin entre le nœud nk et le nœud nk . La
longueur d’un chemin est le nombre de nœuds qu’il contient -1 (c’est en fait le
nombre de segments ou arcs).
La profondeur d’un sommet v est la longueur du chemin qui va de la racine à ce
sommet, on écrit prof(v)
Le niveau p est formé des sommets de profondeur p.
La hauteur d’un arbre est un de plus que la longueur du plus long chemin de la
racine à une feuille. Un arbre vide est de hauteur 0.
Le parcours d’un arbre s’effectue dans un certain ordre pour visiter tous ses
nœuds. Les parcours les plus classiques sont les parcours infixé, préfixé et postfixé.
Ces parcours sont définis récursivement de la manière suivante :
1- Infixe (symétrique) : on parcourt d’abord le premier sous-arbre en infixé,
puis la racine, puis
Chacun des autres sous-arbres, en infixe.
2- Préfixe : on parcourt d’abord la racine, puis chacun des sous-arbres en
préfixe.
3- Postfixe : on parcourt d’abord tous les sous-arbres en postfixe, puis on
parcourt la racine.
-32-
4.3. Parcours d’arbres
1- infixe : L J E B F A C G D H K I
2- préfixe : A B E J L F C D G H I K
3- postfixe : L J E F B C G H K I D A
-33-
5.1. Définition
Chapitre 5
5.1. Définition
Les arbres binaires sont un cas particulier d’arbres. Ce sont des arbres où
chaque nœud possède au plus un fils gauche et au plus un fils droit. Si un nœud
possède un seul fils, il est soit un fils gauche ou un fils droit.
Exemple
Une fois le type arbre est défini on peut déclarer une variable de type pointeur
sur arbre de la manière suivante :
-34-
5.3. Insertion d’un nœud d’une valeur v dans un arbre binaire
p : ^arbre
Si p est un pointeur sur une variable de type arbre, p^ est la variable pointée par
p. cette variable est un enregistrement, pour accéder à ses champs on utilise
l’opérateur "." .
p^. valeur
p^. filsg
p^. filsd
Principe
Algorithme
debut
si (racine<>Nil ) alors
Infixe(racine ^.filsg)
ecrire(racine^.valeur)
Infixe(racine ^. filsd)
finsi
fin
-36-
6.1. Définition
Chapitre 6
6.1. Définition
4 9
1 5
Ecrire la procédure Ajout qui permet d’ajouter une valeur v à un arbre binaire
de recherche donné par l’adresse de sa racine r.
-37-
6.2. Ajout d’une valeur dans un ABR
4 9
1 5
4 9
1 5
Principe
-38-
6.3. Recherche d’une valeur dans un ABR
Ajout(racine^. filsg.v)
Algorithme
Principe
-39-
6.4. Recherche du nœud père d’une valeur dans un ABR
sinon
Recherche Recherche (racine^.filsd, v)
finsi
finsi
finsi
Algorithme
Ecrire la fonction Pere qui permet de renvoyer l’adresse du nœud père du nœud
qui contient une valeur v dans un arbre binaire de recherche donné par l’adresse
de sa racine (racine).
Algorithme
-40-
6.5. Recherche du max d’un ABR
Pere Pere(r^.filsd,v)
finsi
finsi
finsi
finsi
fin
Algorithme
Ecrire la PROCEDURE Supv qui permet de supprimer une valeur v dans un arbre
binaire de recherche donné par l’adresse de sa racine (r).
Principe :
-41-
6.6. Suppression d’une valeur dans un ABR
4 9
1 5
4 9
1 5
-42-
6.6. Suppression d’une valeur dans un ABR
4 9
1 5
1 5
-43-
6.6. Suppression d’une valeur dans un ABR
4 9
1 5
Algorithme
-44-
6.6. Suppression d’une valeur dans un ABR
si(estfeuille(f))alors // 0 fils
si(p^.filsg et p^.filsg^.valeur=v) alors
p^.filsgNIL
Liberer(f)
sortir
sinon
p^.filsdNIL
Liberer(f)
sortir
finsi
finsi
fin
-45-
7.1. Introduction
Chapitre 7
Introduction à la complexité
7.1. Introduction
Exemple :
-46-
7.3. Définition
7.3. Définition
Exemple
Exemple de fonction
7.4.1. Si...Sinon
-47-
7.5. Exemple : le tri par insertion
si (T) alors
{I1}
Sinon
{I2}
finsi
est en O(max{ f1, f2}+g), De manière similaire : Si (T) {I1} est en O( f1+g)
pour i de a à b faire
ACTION(i ),
finpour
si f (i) désigne le coût de l’exécution de ACTION(i ), alors le coût de la boucle
est : ∑𝑏𝑖=𝑎 𝑓(𝑖)
Tantque(C(x) faire
Action(x)
fintantque
xi la valeur quelle prend C dans chaque étape
0≤i≤k
g(xi ) le coût de la condition C(xi )
f (xi ) le coût de l’action ACTION(xi )
alors le coût de la boucle est : ∑𝑘𝑖=0 𝑓(𝑥𝑖 ) + ∑𝑘+1
𝑖=0 𝑔(𝑥𝑖 )
-48-
7.5. Exemple : le tri par insertion
ji
tantque(T [j-1]>v) faire//g(xi)
T [j] T [j-1]// f(xi)
jj-1
fintantque
Le coût de la boucle est : 𝑓1(𝑖) = ∑𝑖−1 𝑖
𝑗=1 𝑓(𝑥𝑖 ) + ∑𝑗=1 𝑔(𝑥𝑖 )
𝑓(𝑥𝑖 ) = 1 + 1 + 1 + 1 = 4
𝑖−1
𝑔(𝑥𝑖 ) = 1 + 1 = 2
𝑖−1 𝑖
-49-
Série 1 : Enoncé
Série 1 : Enoncé
Exercice 1 :
Définir les types maillon et liste permettant de manipuler une liste de nombres
réels
Exercice 2 :
Ecrire la procédure inserttete (ajout en tête de liste) qui permet d’ajouter une
valeur val au début d’une liste chaînée.
Exercice 3:
Exercice 4:
Exercice 5 :
Ecrire une fonction récursive qui permet de renvoyer vrai si un réel val existe
dans une liste chaînée donnée par l’adresse de son premier élément faux si non.
Exercice 6 :
Ecrire une fonction qui permet de renvoyer le nombre d’apparition d’un entier
val dans une liste chaînée donnée par l’adresse de son premier.
Exercice 7 :
Ecrire une procédure qui permet de calculer l’intersection de deux listes dans
un troisième.
-50-
Série 1 : correction
Série 1 : correction
Exercice 1 :
type liste=maillon
Exercice 2 :
Exercice 3:
Exercice 4:
Exercice 5 :
si(premier=nil) alors
existefaux
sinon
si(premier^.valeur=val) alors
existevrai
sinon
existeexiste(premier^.suivant)
finsi
finsi
fin
Exercice 6 :
Exercice 7 :
-52-
Série 2: Enoncé
Série 2: Enoncé
L1 1 1 0 1 0
Exercice 1 :
Ecrire la fonction InsertTete qui permet d’insérer une valeur val en tête d’une
liste donnée par l’adresse de son premier maillon.
Exercice 2 :
Exercice 3 :
𝑛−1
𝑉𝑎𝑙𝐶ℎ𝑎𝑖𝑛𝑒(𝑏𝑛−1 … 𝑏0 ) = ∑ 𝑏𝑖 ∗ 2𝑖
𝑖=0
Donner 𝑉𝑎𝑙𝐶ℎ𝑎𝑖𝑛𝑒(1101) et 𝑉𝑎𝑙𝐶ℎ𝑎𝑖𝑛𝑒(111101).
Exercice 4 :
-53-
Série 2: Enoncé
Exercice 5 :
Exercice 6 :
Ecrire la fonction valChaine qui accepte une liste donnée par l’adresse de son
premier maillon et renvoie la valeur de la chaîne représentée par cette liste.
Par exemple :
𝑉𝑎𝑙𝐶ℎ𝑎𝑖𝑛𝑒(11010) = 26
Exercice 7 :
Exercice 8 :
Deux chaînes de bits c et d sont dits adjacents s'ils sont à une distance de
Hamming de 1.
Ecrire la fonction Adjacents qui accepte deux listes données par les adresses de
leurs premières maillons et renvoie 1 si c et d sont adjacents, 0 sinon.
-54-
Série 2: correction
Série 2: correction
Exercice 1 :
Exercice 2 :
first : ^Liste
Firstnil;
InsertTete(first,0)
InsertTete(first,1)
InsertTete(first,0)
InsertTete(first,1)
InsertTete(first,1)
Exercice 3 :
Exercice 4 :
Exercice 5 :
-55-
Série 2: correction
LongListe 0
sinon
LongListe 1+LongListe(first^.suivant)
finsi
fin
Exercice 6 :
Exercice 7 :
Exercice 8 :
-56-
Série 3 : Enoncé
Série 3 : Enoncé
Exercice 1
Définir la structure de donnée qui permet de d’implémenter le type liste
doublement chainée listedc.
Exercice 2
Ecrire la fonction LongListe qui accepte un pointeur sur la tête d’une liste
doublement chainée first et renvoie la longueur de la liste.
Exercice 3
Ecrire la fonction LongListeApres qui accepte un pointeur sur une liste
doublement chainée p et renvoie le nombre des maillons après le maillon pointé
par p.
Exercice 4
Ecrire la fonction LongListeAvant qui accepte une pointeur sur une liste
doublement chainée p et renvoie le nombre des maillon après le maillon pointé par
p.
Exercice 5
La base 2 est une méthode de représentation des nombres qui n’utilise que les
deux chiffres, 0 et 1 (alors que la base 10 utilise en utilise dix, 0, 1, 2, 3, 4, 5, 6, 7, 8
et 9).
Pour transformer un nombre écrit en base 10 en un nombre écrit en base 2, il
suffit d’effectuer des divisions successives par 2 en prenant à chaque fois le
quotient de la division précédente comme dividende (sauf pour la première fois ou
le dividende est le nombre donné). On arrête ces divisions si le dividende est égale
à 0.
Les restes successifs de ces divisons sont alors la représentation inverse du
nombre de départ.
Par exemple la représentation en base 2 de 13 est 1101
1. Donner la représentation en base 2 de 34.
2. Ecrire la procédure InsertTete qui permet d’insérer une valeur val en tête d’une
liste doublement chainée donnée par l’adresse de son premier maillon.
3. Ecrire la fonction Covert2To10 qui accepte un entier n et renvoie la liste
doublement chainée contenat la représentation de n dans la base 2.
4. Ecrire la procédure AfficheListe qui permet d’afficher une liste doublement
chainée donné par le premier maillon
5. Ecrire un algorithme qui permet de saisir un entier n strictement positif puis il
affiche sa représentation en base 2.
-57-
Série 3: correction
Série 3: correction
Exercice 1
type maillon= enregistrement
valeur : entier
suivant : ^maillon
precedent : ^maillon
finenregistrement
type listedc=maillon
Exercice 2
Fonction LongListe (first :^ listedc) : entier
variable
l : entier
debut
l0
tantque(p) faire
l++
pp^.suivant
fintanque
LongListe l
fin
Exercice 3
Fonction LongListeApres (p :^ listedc) : Entier
variable
l : entier
debut
l0
tantque(p) faire
l++
pp^.suivant
fintanque
LongListeApres l
fin
Exercice 4
Fonction LongListeAvant (p :^ listedc) : Entier
variable
l : entier
debut
l0
tantque(p) faire
-58-
Série 3: correction
l++
pp^.precedent
fintanque
LongListeAvant l
fin
Exercice 5
1. .
100010
2.
PROCEDURE InsertTete (var first : ^ listedc, val : entier)
variable
p1 : ^listedc
debut
p1nouveau(^listedc)
p1^.valeurval
p1^.suivantp
p1^.precedentNil
si(p)alors
p^.precedentp1
finsi
pp1
fin
3.
Fonction Covert2To10 (n : entier) :^listedc
variable
p : ^listedc
r,q : entier
debut
pnil
qn
repéter
r q mod 2
qq div 2
InsertTete(p,r)
jusqu’à(q=0)
Covert2To10 p
fin
4.
PROCEDURE AfficheListe (p : ^listedc )
debut
tantque(p<>nil) faire
ecrire(p^.valeur)
pp^.suivant
fintantque
fin
-59-
Série 3: correction
5.
Algorithme conversion
//déclarations des types
// définitions des fonctions et des procédures
variable
p : ^listedc
n : entier
debut
pNil
ecrire("n=?")
lire(n)
pCovert2To10(n)
AfficheListe(p)
fin
-60-
Série 4 : Enoncé
Série 4 : Enoncé
Exercice 1
Définir la structure de donnée qui permet de d’implémenter le type arbre.
Exercice 2
Ecrire la fonction taille qui permet de renvoyer le nombre de nœud dans un
arbre donné par sa racine r
Exercice 3
Ecrire la fonction père qui permet de renvoyer le nœud père d’un nœud n dans
un arbre donné par sa racine r.
Exercice 4
La profondeur d’un nœud n est la longueur du chemin qui va de la racine à ce
nœud.
Ecrire la fonction profondeur qui permet de renvoyer la profondeur d’un nœud
N dans un arbre donné par sa racine r.
Exercice 5
La hauteur d’un arbre est un de plus que la longueur du plus long chemin de la
racine à une feuille. Un arbre vide est de hauteur 0.
Ecrire la fonction hauteur qui permet de renvoyer la hauteur d’un arbre donné
par sa racine r.
-61-
Série 4: correction
Série 4: correction
Exercice 1
type nœud = enregistrement
v: entier
filsg : ^ nœud
filsd : ^ nœud
finenregistrement
Exercice 3
Exercice 4
FONCTION profondeur (r :^arbre, n:^arbre) : entier
debut
si(père(r,n)=nil) alors
-62-
Série 4: correction
profondeur0
sinon
profondeur1+ profondeur(r, père(r,n))
finsi
fin
Exercice 5
FONCTION hauteur (r:^arbre) : entier
debut
si(r=nil) alors
hauteur 0
sinon
hauteur 1+max(hauteur(r^.filsg),hauteur(r^.filsd))
finsi
fin
-63-
Série 5 : Enoncé
Série 5 : Enoncé
Exercice 1
Donner l’arbre binaire de recherche obtenu après l’insertion successive des
valeurs :7, 4, 5, 1 et 9
Exercice 2
Donner tous les arbres binaires de recherche qui contiennent les valeurs 1, 2 et
3.
Exercice 3
4 9
1 5
4 9
1 5
-64-
Série 5 : Enoncé
4 9
1 5
-65-
Série 5: correction
Série 5: correction
Exercice 1
4 9
1 5
Exercice 2
A1
1 3
A2
-66-
Série 5: correction
A3
Exercice 3
4 9
1 5 17
Exercice 4
5 9
Exercice 5
-67-
Série 5: correction
4 9
Exercice 6
FONCTION existe (r:^arbre, val : réel) : booléen
Debut
si(r<>nil) alors
existefaux
sinon
si(r^.valeur=val) alors
existevari
sinon
si(r^.valeur>val) alors
existe existe(r^.filsg)
sinon
existe existe(r^.filsd)
finsi
finsi
finsi
fin
Exercice 7
FONCTION ABR (r:^arbre) : booléen
debut
si(r=nil ou estfeuille(r)) alors
ABR vari
sinon
si(r^.filsg et r^.filsd) alors// deux fils
si(r^.valeur>r^.filsg^.valeur et r^.valeur<r^.filsd^.valeur)
alors
ABRABR(r^.filsg) et ABR(r^.filsd)
sinon
ABRfaux
finsi
sinon
si(r^.filsg et r^.filsd=nil) alors//1 fils à gauche
si(r^.valeur>r^.filsg^.valeur) alors
ABRABR(r^.filsg)
sinon
-68-
Série 5: correction
ABRfaux
Finsi
sinon
si(r^.valeur<r^.filsd^.valeur) alors1 filsà droite
ABRABR(r^.filsd)
sinon
ABRfaux
finsi
finisi
finsi
fin
-69-