Академический Документы
Профессиональный Документы
Культура Документы
Phelma
2011
2
Cest en
commandant
quon devient
commandant
Cest en
tudiant quon
devient
tudiant
Cest en
saignant
quon devient
enseignant
Cest en
geignant
quon devient
ingnieur
Fonctionnement
Cours/TD : 5 sances de
2 heures
TD : 9 sances, 4 sujets
"es ter#iner
$ projet de 4 sances
3
Plan
(cursivit, co#ple)it
T&pes a!straits
Pile
Principe * /)e#ples
%r!res
Ter#inoloie
1prations de !ase
%r!res particuliers
4 %r!re 5inaire de (echerche
4 Tas
6raphes
Ter#inoloie
(eprsentations
Rappel sur lanalyse
Rappel sur lanalyse
27 identi.ier les actions ,ue l0on peut .aire avec ses o!jets 2.onctions3
Carte
Couleur : carreau,tr'.le,,<
Pa,uet :
Pile de !ataille :
Prendre :: dessus
Para#'tres :
/ntre : pa,uet,
?aleur de retour :
carte
(@le
6lisser::sous
Para#'tres
?aleur de retour:
pa,uet
(@le,
(etourne le pa,uet
Prendre :: dessus
Para#'tres
/ntre : pile,
?aleur de retour :
carte
(@le
Aettre dessus
Para#'tres
?aleur de retour :
pile
(@le
taille ##oire
te#ps d0e)cution
Co#ple)it : rerouper dans une #esure intuitive ces in.or#ations sur le co#porte#ent
d0un prora##e en .onction du volu#e des donnes traites:
Co#ple)it
#o&enne
/)e#ple : un tri
On cherche le ma6imum du tableau
On l)change avec le dernier lment du tableau pas encore tri
On recommence sur les lments non tris
int triselection(int8 tab, int n 2 int i,(, ima65
,or (i915 i.n!"5 i:: 2ima6915
,or ((9"5 (.n!i5 (::
i, (tab3(4/tab3ima64 ima69(5
sLap(Jtab3n!i4,Jtab3ima645
;
/)e#ple :
Aesure utilise
Co#porte#ent as&#ptoti,ue
o2n3, o2n
2
3, o2nlo2n33:::
nE$ 2 4 F $G 82
lo ; $ 2 2 4 5
n $ 2 4 F $G 82
n lo n ; 2 F 24 G4 $G;
n
2
$ 4 $G G4 25G $;24
n
8
$ F G4 5$2 4;9G 82HGF
2
n
2 4 $G 25G G558G 42949GH29G
Cons,uence :
toujours un pro!l'#e #I#e si les #achines sont de plus en plus rapides, car les
volu#es de donnes traites au#entent
Rcurrence% Rcursi&it
21
Rcursi&it !1"
Dfinition
/)e#ples
-actorielle : nJ E n ) 2n7$3J
Prora##ation rcursive
Taille du pro!l'#e :
Para#'tre n dcroissant
.ac2n3EnK.ac2n7$3
.ac2$3 E $
22
Rcursi&it !2"
78 recur".c 87
-include .stdio.h/
int ,ac(int n 2 int C5
print,(EEntree dans ,actorielle avec n 9 $MdNnE,n5
i,(n/" C9n8,ac(n!"5
else C9"5
print,(EOin de l)etape Md5 valeur MdNnE,n,C5
return C5
;
main( 2 int a, res5
puts(EEntrer un nombreE5 scan,(EMdE,Ja5
res 9 ,ac(a5
print,(EOactorielle de Md 9 Md NnE,a,res5
;
23
i,(%/" C9%8,ac("5
Rcursi&it !#"
main( 2 r9,ac(P5; %P
r
P
C
&
C
%
C
"
C
"
%
>
%P
%P
int ,ac(int n 2 int C5
i,(n/" C9n8,ac(n!"5
else C9"5
return C5
;
return(C
i, ("/" C9"5
return C5
"
i, (&/" C9&8,ac(%5
return C5
%
i,(P/" C9P8,ac(&5
return C5
>
24
Rcursi&it !$"
Co#!ien de solutions B
25
Rcursi&it !'"
void hanoi(int n, int dep, int arr, int inter 2
i, (n99" print,( Edeplace " dis#ue de Md vers MdE,dep,arr5
else 2
hanoi(n!",dep,inter,arr5
print,(Etrans,ere " dis#ue de Md vers MdNnE,dep,arr5
hanoi(n!",inter,arr,dep5
;
;
main( 2 int a5
puts(EEntrer le nombre de dis#uesNnE5 scan,(EMdE,Ja5
hanoi(a,",%,&5
;
para#'tre : +
Para#'tres N +,%,5,C
26
Rcursi&it !("
Ci#plicit de prora##ation
rapide crire
CoDt
##oire : pile
CPP
appel de .onctions
Conclusion
/)e#ple : le !auenaudier
('les
Poser le Gie#e
1n sait co##ent,
1 2 3 4 5 6 7 8
o o
Conclusion
poser le n
i'#e
/)o 4 : %nara##es : a..icher les anara##es dun #ot par la #thode suivante : on
prend un #ot et on per#ute sa pre#i're lettre avec chacune des autres lettres, &
co#pris elle7#e#e: /nsuite pour chacun des nouveau) #ots o!tenus, on .ait les
per#utations entre la deu)i'#e lettre et toutes les autres lettres, etc<
/)o 5 : les F reines : co##ent placer F reines sur un echi,uier sans ,uelles soient en
prises B 1n essa&e de placer une reine sur la pre#i're line li!re, sans ,uelle soit en
prise: Puis on essa&e de placer n7$ reine sur les n7$ lines suivantes:
Rcursi&it : pour en
sa&oir plus
33
Rcursi&it : le sudo*u
4
5 6 5 6 5 4
9
34
Rcursi&it : le sudo*u
sinon
sinon
35
Rcursi&it : le sudo*u
int resolution(char tab343IBK%4 2 int i,(,k,l5
char choi63IBK%45
78 Fuelle est la meilleure case a (ouer Q 87
i, ( (k9meilleurRchoi6(tab,Ji,J(99IBK%:" return S<S0E5
78 Ai k91, pas de possibilites de (eu $ echec de cet essai 87
i, (k991 return BKPOAABT+E5
78 On met dans le tableau choi6 tous les coups possibles 87
listeRchoi6(tab,i,(,choi65
78 On teste toutes les possibilites de (eu (us#uUa trouver une solution
#ui marche 87
,or (l915 l.k5 l:: 2
tab3i43(49choi63l45
78 appel de la ,onction de resolution en aCant mis un chi,,re dans la
case i,(. Ai on gagne, on arrete, sinon, on essaCe une autre possibilit
87
i, (resolution(tab99S<S0E return S<S0E5
else tab3i43(49VBIE5
;
78 Bci, tous les essais pour la case i,( ont t ,aits et il a t
impossible de trouver une solution 87
return BKPOAABT+E5
;
+ype Abstrait , structures
de donnes
-iste% .iles% piles
37
/uel0ues types abstraits
"tructures de donnes
*&rations de $ase+
Pour lutilisateur
Une valeur
8
1
1
1 8
*&rations de $ase+
initialisation + 89 liste
longueur: &remier
1
1 !
42
-iste : 3mplmentation
Pointeur
contigu@ &ar
c.a1nage e(&licite
Bne liste < c%est un &ointeur vers un maillon ou vers null 8liste
vide9
46
/0&e ) d'inir +
typedef double ELEMENT;
struct cellule {
ELEMENT val;
struct cellule * suiv;} ;
typedef struct cellule * Liste;
Btile ) red'inir
C.aque maillon de la liste contient 1 valeur et 1 &ointeur qui est ladresse du suivant et tous
les maillons ou c.a1nons sont du m3me t0&e
#(em&le +
la liste vide
Une liste vide est re&rsente un &ointeur vide (ou $ULL) au d&art
Cration de liste
Liste creer.liste(void!
{ return N/LL; "* la liste vide est represent0e par N/LL *"
}
est=vide +
int est.vide(Liste L!
{ return 1L; "* la liste vide est represent0e par N/LL *"
}
#(em&le
main(!
{ Liste L;
L ( creer.liste(!;
if (est.vide(L!! printf(,la liste est vide2n,!;
else printf(,la liste n3est pas vide2n,!;
}
Cration dune liste
49
-istes : a8out en t9te!1"
l l 1
Fettre 1 dedans
>nsrer ce nouveau maillon au $on endroit devant tous les autres: cest ) dire
>ndiquer ) ce nouveau maillon que son suivant est celui qui contient 9
"u&&ression en t3te +
ne &as &erdre la t3te de
liste
54
-istes : suppression en
t9te !2"
1
2
&
1
1
2
3
2
&
1seul lment
Plusieurs lments
1
L
L
*ttention + ne &as li,rer la mmoire
*-*$% de sauver le suivant
3
L
L
3
55
-istes : suppression en
t9te !#"
Hisualiser itrati'
void visualiser(Liste L!
{ Liste p;
for (p(L; 1est.vide(p!; p(p+&suiv!
affic*e(8p+&val!;
}
9ffic*e
Parcours itrati. !1"
&
1
&
2
&
3
1 8 L
1 8
Comme &our les ta$leau(: il 'aut un indice &our aller de maillon en maillon.
0oint essentiel + &our &asser 1 llment suivant. il suffit que & &renne la valeur
suivante
& 2 &34suiv
57
Hisualiser itrati'
void visualiser(+iste +
2 +iste p5
p9+5
Lhile (YestRvide(p 2
a,,iche(Jp!/val5
p9p!/suiv5
;
;
9ffic*a;e ecran $
Parcours itrati. !1"
&
1
&
2
&
3
1 8 L
1 8
4
0x0000
1
0x0000
p
0x0000
0x1'00
0x1(00
;
l
0x1'00
0x1(00
0x1000
0x1000
0x1'00 0x1(00 0x1000 0x0000
-istes tries
;,outer le rel 8 ) la liste l contenant d,) les rels 0: 1 et 9 dans cet ordre
5 L 1
8
60
A8outer !1"
Fettre 8 dedans
>nsrer ce nouveau maillon au $on endroit 8entre les maillons contenant 1 et 99 +'aire les c.ainages
corrects
>ndiquer ) ce nouveau maillon que son suivant est celui qui contient 9
;lgorit.me itrati'
fonction a4outer(element e, Liste L! $
Liste
variable c,p $ Liste;
<e positionner avec c 4uste avant le
point d6insertion ;
#r0er un c*ainon p
<toc=er la valeur e dans la partie
correspondante de p
5emplir l3adresse du c*ainon suivant
p (c60tait la partie suivant de c!
Modifier l3adresse du c*ainon suivant
c, car c3est > :ui suit 1 maintenant
1 ///
1
&
8
1 3
3
2
2
c
0
0
Liste a4outer(ELEMENT e, Liste L!
{ Liste p,c;
if (est.vide(L! ??
compare(8e,8L+&val!@'!
return a4out.tete(e,L!;
for(c(L; 1est.vide(c+&suiv!88
compare(8e,8c+&suiv+&val!&';
c(c+&suiv! ;
p( calloc(1,siAeof(#ell!!;
p+&val(e;
p+&suiv( c+&suiv;
c+&suiv(p;
return L;
}
62
A8out itrati.
;lgorit.me itrati'
-include Eliste.hE
main( 2 +iste l5
l9creerRliste(5 visualiser(l5
l9a(outer(W,l5 visualiser(l5
l9a(outer(X,l5 visualiser(l5
l9a(outer(",l5 visualiser(l5
l9a(outer(=,l5 visualiser(l5
l9a(outer("=,l5 visualiser(l5
;
63
-istes tries : A8out
rcursi.
;lgorit.me rcursi' +
;,outer rcursi' +
+iste a(outer(E+EKE0T e, +iste +
2 i, ( estRvide(+[[ compare(Je,J+!/val.1
return a(outRtete(e,+5
else 2
78a(outer ##part apres $ la ,onction nous renvoie la
liste obtenue en a(outant e dans le reste de la liste 87
+!/suiv9a(outer(e,+!/suiv5
return +5
;
;
main( 2 +iste l5
l9creerliste(5
l 9 a(outRtete(W,l5
l 9 a(outRtete(",l5
l 9 a(outer(X,l5
;
65
Autres listes
la valeur de l%lment
l%adresse du suivant
l%adresse du &rcdent
!istes circulaires
aire une 'onction qui rec.erc.e si un lment 8un rel9 est &rsent dans une liste +
cette 'onction retourne le maillon de la liste contenant la valeur si elle est &rsente ou
2B!! sinon
aire une 'onction qui ins7re en t3te dans une liste dou$lement c.aine
aire une 'onction qui ins7re en queue dans une liste dou$lement c.aine
aire une 'onction qui ins7re en t3te dans une liste circulaire sim&lement c.aine
aire une 'onction qui a,oute un rel dans une liste trie et dou$lement c.aine de
rels-
aire une 'onction qui &rend une liste en &aram7tre: et cre une nouvelle liste
contenant les lments en ordre inverse- ; t on $esoin de conna1tre la nature des
lments de la liste 6
Pour en sa&oir plus
Parcours gnriques
67
68
Parcours rcursi.
Cas gnral +
Cas &articulier
Hisualiser rcursi'
void visualiser(Liste L!{
if(1est.vide(L!!{affic*e(L+&val!; visualiser(L+&suiv!;} }
main(! { Liste L;
L(creer.liste(!; L(a4outer(B,L!; L(a4outer(C',L!; DD ; visualiser(L!; }
30 L 5 20 10
Eisualiser.5ec
L
if(1L! {
printf(,-d,,L+&val!;
visualiser(L+&suiv!;
}
Eisualiser.5ec
L
if(1L! {
printf(,-d,,L+&val!;
visualiser(L+&suiv!;
}
Eisualiser.5ec
L
if(1L! {
printf(,-d,,L+&val!;
visualiser(L+&suiv!;
}
Eisualiser.5ec
L
if(1L! {
printf(,-d,,L+&val!;
visualiser(L+&suiv!;
}
Eisualiser.5ec
L
if(1L! {DD}}
10 20 30 5
70
Parcours et action
Hersion itrative
void actionRlisteRit(+iste + 2
,or(p9+5 YestRvide(p5 p9p!/suiv
action(p5
;
Hersion rcursive
void actionRlisteRrec(+iste + 2
i,(YestRvide(+ 2
action(p5
actionRlisteRrec(+!/suiv5
;
;
71
Parcours et modi.ication
Hersion itrative
+iste actionRliste(+iste + 2
,or(p9+5 YestRvide(p5 p9p!/suiv action(p5
return +5 78 Ou la nouvelle tete de liste si action l)a modi,ie
;
Hersion rcursive
+iste actionRliste(+iste + 2
i,(YestRvide(+ 2 action(p5 +!/suiv 9 actionRliste(+!/suiv5 ;
return +5
;
Piles
73
Piles
Pro&rit
#(em&le+
#m&iler 10
#m&iler 20
#m&iler 30
K&iler
15
25
35
74
Piles
-include Epile.h
main( 2 Pile p5
E+EKE0T e5
p9creerRpile(5
p9empiler("1,p5 visualiser(p5
p9empiler(%1,p5 visualiser(p5
p9empiler(&1,p5 visualiser(p5
e9 depiler(Jp5
print,(EIepiler$ valeur de l)element depil Ml,NnE,e5
visualiser(p5
;
15 L
25
35
75
Piles
*&rations
creer=&ile + ?I &ile
initialisation-
Pro&rit
/erminologie +
t3te de 'ile
queue de 'ile
/erminologie +
#n'iler 10
#n'iler 20
#n'iler 30
de'iler
15
25
35
t9te
0ueue
79
Files
*&rations
'ile=vide + ?I 'ile
F
5 20 10
30
F
5 20
10
90
ajouter 90
supprimer
30
F
5 20
90
10
fle vide
F
81
mafi le
mafi le
8
mafi le
ile + d'inie &ar un seul &ointeur sur la 5B#B# avec une !iste C>4CB!;>4#
!a tete est d'inie &ar lelement qui suit la queue + tete < liste?Isuiv
un ta$leau
0ile initiale
Kclaration
Fdefine LGNH.IJLE B
typedef double ELEMENT;
typedef struct { int nbre; ELEMENT
tabKLGNH.IJLEL;}* Iile;
10 20 #0 5;
$
5 1 2 3 4 ! ' 6
10 20 #0
#
5 1 2 3 4 ! ' 6
10 20
2
5 1 2 3 4 ! ' 6
E
m
p
i
l
e
r
5
;
d
e
p
i
l
e
r
85
Files : reprsentation
contigu?
structure+
#( 1 + Piles &ar listes c.aines + #crire les 'onctions em&iler: de&iler- 5uel est le cout
8com&le(it9 en 'onction du nom$re delements de la liste
#( 2 + Piles &ar listes c.aines + Comment crit on les 'onctions em&iler: de&iler en
utilisant les 'onctions a,out=tete et su&&=tete sur les listes c.aines-
#( 3 + iles &ar listes c.aines classiques + #crire les 'onctions en'iler: d'iler
#( 5 + Piles &ar ta$leau + #crire les 'onctions em&iler et de&iler- 5uel est le cout
8com&le(it9 en 'onction du nom$re delements de la liste
7ictionnaires
5
7ictionnaire ou table
Le ,ut dun dictionnaire est dtre ca&a,le daccder ra&idement 1 une valeur. en
donnant sa cl/
<ictionnaire des mots connus dans une lan7ue dans un fichier ($ mots. $ 7rand)
*nnuaire invers + trouver le nom dun individu 1 &artir de son numro de tl&hone
Listes
%a,le de hacha7e
*r,res ,inaires
*r,res le8ico7ra&hiques
2
:olution se0uentielle
@olution squentielle
:har7er le fichier en mmoire dans un ta,leau ou une liste de $ lments (des mots en
%<)
"n moAenne (en su&&osant une equi3re&artition des mots dans la lan7ue) =
3
7ichotomie
0rinci&e + dans un ta,leau tri. tous les lments avant le milieu du ta,leau sont
&lus &etit que llment du milieu. ceu8 &lacs ensuite sont &lus 7rands
Le ta,leau contient des lments tris selon les cls entre les indices i125 et i22$31
Recherche de 1!5
Le &ire des cas (le nom,re ou le mot ne8iste &as dans le dictionnaire) =
"n moAenne (en su&&osant une equire&artition des mots dans la lan7ue) =
355 255 15 1!5 155 85 45 25 15
#ais comme lintervalle entre i1 et i2 est nul. cela veut dire quil faut sarreter
'
Recherche par
interpolation
0rinci&e+ on su&&ose quil e8iste une relation entre la valeur dun lment et
lendroit oH il est ran7 en mmoire
%rier le ta,leau/
Le ta,leau contient des lments tris &ar cls entre les indices i125 et i22$31
Recherche de 1!5
35 G 45 et comme lintervalle i1 i2 est nul. on recommence avec i122. i22im3122 + lintervalle est nul
Le &ire des cas (le nom,re ou le mot ne8iste &as dans le dictionnaire) =
"n moAenne (en su&&osant une equire&artition des mots dans la lan7ue) =
2!5 255 15 1!5 155 85 45 25 15
#ais comme lintervalle entre i1 et i2 est nul. cela veut dire quil faut sarreter
@achage
155
+able de hachage
acc9s 1 lKlment 1 lKaide dune cl + dans le cas du dictionnaire. la cl est le mot dont on
recherche la dfinition/
La cl est utilise &our calculer un indice entier. qui donne la &osition du mot dans le
ta,leau
:e calcul est fait &ar une fonction de hacha7e. a&&lication de lKensem,le des cls vers les
entiers
hash(,ac)2(2B1B3)M$ 2 '
99
alculer hash!xxxx" #ui donne l$indice n dans le tableau o% doit se trou&er le mot xxxx
'i tableau(n) contient xxxx* alors le mot !et sa dfinition" est trou&
Utiliser une deu8i9me fonction de hacha7e diffrente de la &remi9re qui doit s&arer et
donner des indices diffrents + il est &eu &ro,a,le que deu8 mots aient deu8 valeurs de
hacha7e identiques &ar deu8 fonctions distinctes+ hacha7e dou,le
153
-es collisions existent
elles A
0our que &ersonne nait le mme Pour danniversaire. il A a 3'! 8 3'4 8 Q/ 8 (3'!3nB1)
On est &resque sur quil A aura eu une collision a&r9s lintroduction du 66i9me
lment
ra&ide 1 calculer
:ls numriques
0remi9re fonction
hash(L) 2 (c
5
B aJc
1
B a
2
Jc
2
B a
3
Jc
3
//// B a
L
Jc
L
) modulo $
Tonction universelle
toutes les cls aAant mme hacha7e sont chanes entre elles
:onstruction et recherche
@Kil A a dP1 un lment. on cherche la &remi9re case li,re dans la Uone rserve/
31
,ac + h2'
lame + h 2 31
male + h 2 31
ca, + h 2'
mela + h 2 31
8
6
Q
31
//
'
//
5
31
31
31
31
31
31
31
31
,ac 8
lame
mela
ca,
male 6
Recherche de male
Recherche de elam
156
Collisions par recalcul
Vacha7e linaire
<ou,le hacha7e +
sim&le
su&&ressions sim&les
intressant &our #44$ + &lus de cls et dKlments que dKentres dans la ta,le de
hacha7e
recherche en moAenne+
Vacha7e ferm
recherche en moAenne+
$om de la fonction
0ointeur de fonction
"81 + "crire une fonction de hacha7e &our une cl al&hanumrique &our une ta,le de $
lments/
"82 + "crire une fonction effectuant la recherche dichotomique dune chaine de caract9re
dans un ta,leau de chaines de caract9res/
"83+ "crire un &ro7ramme utilisant la fonction ,search &our rechercher une chaine de
caract9re dans un ta,leau de chaines de caract9res/
Arbres
116
Arbres explicites :
reprsentation de donnes
117
Arbres explicites !2"
118
Arbres : terminologie
racine
bord gauche
bord droit
feuille
noeud interne
noeud interne
au sens large
chemin
pre
filsdroit fils gauche
ascendants
branche
feuilles
feuille
racine
119
Arbres : terminologie !2"
nXud
racine
&9re
les fils
Proprits essentielles
#esures
racine + 5
soit &ide*
0prations
rer un arbre
1rbre &ide 2
13outer un element
+nle&er un element
4arcours et utilisation
4arcours en profondeur:
4arcours en lar-eur:
*r,re ,inaire
soit vide
*N 0arfait + ar,re dont tous les niveau8 sont com&l9tement rem&lis sauf le dernier/
Re&rsentation &ar ta,leau facile + :haque noeud a des fils au8 indices 2i et 2iB1/
122
AF: modEle abstrait !2"
ar,reYvide + 34 ar,re
-isualisation
&arcours+ar,re 34
Re&rsentation chane +
tCpede, int eti#uette5
tCpede, struct noeud 2
eti#uette val5
struct noeud 8 gauche5
struct noeud 8 droit 5 ; 0OEGI, 8 <DTDE5
60
30
10 50 80
90
60
90
80 50
30
10
124
AF: Exemple
6
!
" 9
J83'
(38)J'
!
6
" 9
125
AF: Parcours sans
modi.ications de l=arbre
0arcours en &rofondeur
6
!
" 9
6
7
9 x 6
a,,icheRDSI(\!)
print,(\!)5
a,,icheRDSI(\8)5 77 <,,iche le ,ils gauche de !
print,(\8)5
a,,icheRDSI(\W)5 77 <,,iche le ,ils gauche de 8
print,(\W)5
pas de ,ils, donc ,in de a,,icheRDSI(\W)5
a,,icheRDSI(\])5 77 <,,iche le ,ils droit de 8
a,,icheRDSI(\>)5 77 <,,iche le ,ils droit de !
a,,icheRDSI(\!)
print,(\!)5
a,,icheRDSI(\8)5 77 <,,iche le ,ils gauche de !
a,,icheRDSI(\>)5 77 <,,iche le ,ils droit de !
a,,icheRDSI(\!)
print,(\!)5
a,,icheRDSI(\8)5 77 <,,iche le ,ils gauche de !
print,(\8)5
a,,icheRDSI(\W)5 77 <,,iche le ,ils gauche de 8
a,,icheRDSI(\])5 77 <,,iche le ,ils droit de 8
a,,icheRDSI(\>)5 77 <,,iche le ,ils droit de !
126
AF: Parcours sans
modi.ications de l=arbre
4arcours en profondeur
6
!
" 9
127
AF: Parcours sans
modi.ications de l=arbre
0arcours en &rofondeur
0arcours en lar7eur
*l7orithme
aPouter la racine de lKar,re dans la file
tant que la file nKest &as vide faire+
dfiler
action 1 raliser()
enfiler le fils 7auche
enfiler le fils droit
fin tant que
6
!
" 9
128
AF: Parcours a&ec
modi.ication de l=arbre
*ttention. si on doit modifier lar,re. il faut. comme &our les listes crire +
ARBRE parcours_et_modification(ARBRE p) {
if (p) {
/* Je fais ce que je dois faire sur la valeur de ma racine */
p->val=action(p);
/* Si besoin, Je fais ce que je dois faire sur le fils gauche :
Je rcupre le nouvel arbre et je change le fils gauche avec
le nouvel arbre */
p->gauche=parcours_et_modification (p->gauche);
/* Idem pour le droit */
p->droit=parcours_et_modification (p->droit);
}
else {
/* Cas ou larbre est vide : Peut etre y a t il qqchose faire ici*/
}
return p;
}
Arbres binaires de
recherche
130
AFR
1rbre &ide 2
int arbreRvide(arbre a2 return a990G++5 ;
13out de ;
60
30
10 50 80
90
5
13out de 1;
60
30
10 50 80
90
15
13out de <0
100
13out de 100
60
30
10 50 80
90
133
AFR A8outer
sinon
si la valeur stocke sur la racine est plus grande #ue la valeur * insrer
alors a(outer ce n^ud dans le sous arbre gauche et retourner le nouvel arbre
sinon a(outer ce n^ud dans le sous arbre droit et retourner le nouvel arbre
<DTDE a(outer(eti#uette nouveau, <DTDE a 2
i, (YarbreRvide(a 2 78 aY9arbreRvide( 87
i, (nouveau. a!/val
a!/gauche9a(outer(nouveau,a!/gauche5
else
a!/droit9a(outer(nouveau,a!/droit5
return a5
;
else 2 <DTDE b9(arbrecalloc(",siZeo,(noeud5
b!/val9nouveau5
return b5
;
;
134
AFR supprimer
3 cas
n,ud a&ec 1 seul fils : le n,ud est remplac par son fils
noeud a&ec ? fils : remplac par le plus petit lment du sous arbre droit ou le plus
-rand du sous arbre -auche pour respecter l'ordre
+xemple :
4roprit essentielle
0prations
retourne la racine
+xemple
138
+A: : a8outer
20
80
40
140
160
10
90
100
30 70
20
80
40
140
160
10 150
90
100
30 70
20
80
40
140
160
10
150 90
100
30
70
13out de 1;0
13
+A: : suppression
20
80
40
140
10
90
100
30 70
20
80
40
140
10
90
100
30 70
20
80
40
10
90
100
30 70
140
20 40
10 90
100
30 70
140
80
40
10
90
100
30 70
140
80
20
20
80
40
140
160
10
90
100
30 70
2
2 2
2
2
2
145
+A: : reprsentation
proprit:
9eprsentation en tableau
1'5
145
85
65
5
155
45
!5
15
35
5
1
3
6
2
4 ! '
8
5 1 2 3 4 ! ' 6 8
1'5 145 155 85 65 5 35 !5 45 15
141
+ri par +A:
4rendre un tas.
5 1 2 3 4 ! ' 6 8
15 145 155 85 65 5 35 !5 45 1'5
142
+ri par +A:
1rbre ?636I :
+xemple :
9eprsentation
tCpede, struct noeud 2 char val5
struct noeud 8,ils, 8 ,rere5 ; 0OEGI, 8 <DTDE5