SlideShare une entreprise Scribd logo
Structures de données arborescentes
Les arbres
1
Prof. M. Khalifa MANSOURI
Université Hassan II de Casablanca
ENSET de Mohammedia
Département Mathématiques et Informatique
Structures de données arborescentes
2
Pour faire fonctionner correctement et efficacement son
programme, un programmeur doit toujours chercher la bonne
méthode pour organiser les données. Ainsi, le choix de la structure
de données est déterminante.
Il existe quatre grandes classes de structures :
Les structures de données séquentielles (tableaux) ;
Les structures de données linéaires (liste chaînées) ;
Les arbres ;
Les graphes.
Introduction
Structures de données arborescentes
3
 Inconvénient des structures séquentielles
 En format contigu, les mises à jour sont fastidieuses et coûteuses
 En format chaîné, les parcours sont de complexité linaire
 Les structurations arborescentes permettent une amélioration
globale des accès aux informations.
Introduction
Structures de données arborescentes
4
 Arbre généalogique
 Organigramme d’une entreprise
 Table des matières d’un livre
 Les expressions arithmétiques
 Tournois sportifs
 Le décisionnel
 Classification : par questionnaire binaire
 Nœud= question, feuille = réponse, branche gauche
étiquetée par faux et branche droite par vrai
 Recherche : par arbre binaire de recherche (ou ordonné)
 Files de priorité : par arbre tournoi : gestion des tampons avec
priorité
Application des arbres :
Buts des Structures arborescentes
 Organisation hiérarchique des informations : intuitive et
conforme à beaucoup de situations :
Structures de données arborescentes
5
 Arbre = graphe purement hiérarchique
 pas de cycle
 un seul chemin d’un nœud à un autre
 Arbre binaire = tout nœud a au plus deux fils
 Liste = arbre dégénéré
 Forêt = ensemble d’arbres
Classification des structures
Graphes
Arbres
Arbres binaires
Listes
Piles
Files
Forêt
Autres
Les Arbres en général
6
Définition récursive d’un arbre
 Un arbre est:
 Vide
 Ou constitué d’un élément (information ou valeur) et d’un ou
plusieurs arbres
Définitions :
…
Les Arbres en général
7
Définitions, Terminologies :
A
B C
D
E
H J
I
 A: racine
 A,B,C,D,E,F,G,H,I,J: nœuds ou
sommets
 B,C,E: sous arbres
 D,F,G,H,I,J: sous arbres
 Tout sous arbre est un arbre
 D,E,F,G,H,I,J: Feuilles ou nœuds
terminaux
 Un nœud peut être fils d’un autre:
B est fils de A, F est fils de B
 Un nœud peut être père d’un autre:
A est père de B et C, B est père de
D,E,F et G
 Tout chemin de la racine à une
feuille est une branche
F
G
Les Arbres en général
8
Définitions, Terminologies :
• R, A, B, C, D,E : nœuds ou sommets
• R racine, D - E sous-arbre, A – B – C sous-
arbre
• Un nœud peut être fils d’un autre
– C est un fils de A
• Un nœud peut être père d’un autre
– D est le père de E, A est le père de C
• B, C, E sont des nœuds terminaux ou
feuilles
• Tout chemin de la racine à une feuille est
une branche : R – A – C est une branche
R
A
B C
D
E
Les Arbres en général
9
Définitions, Terminologies :
• Nœuds d’un même niveau = issus d’un
même nœud avec même nb de
filiations : R=Niveau 0, A,D = Niveau 1
et B,C,E = Niveau 2
• Parcours en largeur = par niveau
 R-A-D-B-C-E
• Taille d’un arbre = nb de nœuds = ici 6
• Hauteur d’un arbre = niveau maximum
= ici 2
• Arbre dégénéré = au plus un
descendant par nœud
R
A
B C
D
E
Niv 0
Niv 1
Niv 2
Les Arbres en général
1
Définitions, Terminologies :
 Taille d’un arbre= nombre de nœuds: ici, 10
 Chemin : une séquence n1 n2 · · ·nk de nœuds telle que, pour tout 1 <=i < k : ni+1
appartient à Succ(ni). On dit que ce chemin va de n1 à nk.
 Longueur d’un chemin n1n2 · · ·nk est le nombre k de nœuds qui le composent.
 Hauteur d’un arbre= Longueur du plus long chemin partant de la racine: ici, 3
 Profondeur d’un nœud= longueur du chemin allant de la racine à ce nœud.
 Arbre dégénéré: au plus un descendant par nœud.
 Une liste chainée est arbre dégénéré
Définition récursive de la hauteur
 la hauteur d’un arbre est égale à la hauteur de sa racine
 la hauteur d’un arbre vide est nulle
 la hauteur d’un nœud est égale au maximum des hauteurs de ses sous-arbres plus
un
Les Arbres en général
1
Définitions, Terminologies :
• Hauteur d’un nœud : Nombre d’arcs séparant
ce nœud à la feuille la plus loin accessible
depuis ce nœud.
• Hauteur de l’arbre : longueur de sa plus longue
branche
• Définition récursive de la hauteur d’un arbre :
 la hauteur d’un arbre est égale à la hauteur de
sa racine
 la hauteur d’un arbre ne contenant que la
racine est nulle : les feuilles ont une hauteur
nulle
 La hauteur d’une arbre vide est fixée par
convention à -1
 la hauteur d’un nœud est égale au maximum
des hauteurs de ses sous-arbres plus un
R
A
B C
D
E
Exemples d’arbres
1
Exemples d’arbres
1
Exemples d’arbres
1
Des cas particuliers
1
 Arbres ordonnés: souvent, on fixe un ordre pour les fils pour augmenter l’efficacité des
algorithmes
 Arbre n-aires: Souvent on fixe le nombre de fils pour limiter la complexité. Un arbre n-aires,
il possède au plus n fils.
 Arbre binaire: c’est un cas particulier des arbres n-aires (n=2)
Les arbres binaires
1
Représentation graphique d’un arbre binaire
 graphique
 Parenthésée : R(A(B,C),D(,E))
 chaînée
typedef struct _tnœud
{
struct _tnoeud *gauche;
telement info;
struct _tnoeud *droite;
}tnoeud;
racine
R
A
B C
D
E
Les arbres binaires
1
Représentation graphique d’un arbre binaire
1
2 3
4 5 6 7
8Nœud=
{
Information: <T>;
fils_gauche: nœud;
fils_droit:nœud;
}
 Racine: pointeur
 Élément à gauche: pointeur
 Élément à droite pointeur
Les arbres binaires
1
Définition
 Dans un arbre binaire, chaque nœud a au plus deux fils
 Plus généralement, si chaque nœud a au plus n fils, l’arbre est n-aire
 Un arbre binaire est soit vide ou contient un arbre gauche (fils
gauche) et un arbre droit (fils droit)
 Un arbre binaire est vide ou composé d’un élément auquel sont
rattachés un sous-arbre gauche et un sous-arbre droit
Les arbres binaires
1
Définition d’arbre binaire :
• Notation parenthésée :
R ( A (B,C), D (, E))
• On peut manipuler un arbre
binaire avec trois primitives :
 valeur d’un nœud,
 fils gauche d’un nœud et
 fils droit d’un nœud.
R
A
B C
D
E
Les arbres binaires
2
Exemple
1
2 3
4 5 6 7
8
Notation avec parenthèses
1(2(4,5(,8)),3(6,7))
Les arbres binaires
2
Manipulation :
On manipule un arbre à l’aide des éléments suivants:
 Le contenu du nœud
 L’adresse du nœud à gauche
 L’adresse du nœud à droite
L’information pour signaler qu’un nœud (X) n’a pas de fils gauche (X->fg=NULL) ou n’a pas
de fils droit (X->fd=NULL) est importante
Arbre binaire complet :
• Chaque nœud non terminal a exactement deux fils
• Arbre binaire complet au sens large ou arbre parfait :
 l’avant-dernier niveau est complet
 les feuilles du dernier niveau sont groupées le plus à gauche
possible
Les arbres binaires
2
Structure de données :
typedef struct Element
{
<T> val; // T peut représenter n’importe quel type
Element *fg;
Element *fd;
} ArbreB;
Les primitives des arbres binaires
2
 Allouer l’espace pour un nœud
 Initialiser un nœud : sa valeur et ses fils
 Changer la valeur d’un nœud
 Récupérer la valeur d’un nœud
 Changer le fils gauche d’un nœud
 Changer le fils droit d’un nœud
 Récupérer le fils gauche
 Récupérer le fils droit
 Tester si un nœud est une feuille
Les primitives des arbres binaires
2
Allouer l’espace mémoire pour un nœud
ArbreB *allouer_espace_noeud()
{
ArbreB *p;
p=(ArbreB*) malloc(sizeof(ArbreB));
return p;
}
main()
{
ArbreB *A;
A=allouer_espace_noeud();
printf("adresse de A : %d",A);
}
Programme main
Les primitives des arbres binaires
2
Initialiser un nœud
ArbreB *initialiser_noeud(ArbreB *p, int v)
{
p->val=v;
p->fg=NULL;
p->fd=NULL;
return p;
}
main()
{
ArbreB *A;
A=allouer_espace_noeud();
A=initialiser_noeud(A,1);
}
Programme main
Les primitives des arbres binaires
2
Vérifier si un nœud est vide
int estVide(ArbreB *p)
{
if(p==NULL) return 1;
return 0;
}
main()
{
ArbreB *A;
A=allouer_espace_noeud();
A=initialiser_noeud(A,1);
if (!estVide(A))
printf("n%i",A->val);
else
prinft(“noeud vide”);
}
Programme main
Les primitives des arbres binaires
2
Changer la valeur d’un nœud
void setValeur(ArbreB *p, int v)
{
if(p) p->val=v;
else
Printf(« opération non autorisée »);
}
main()
{
ArbreB *A;
A=allouer_espace_noeud();
A=initialiser_noeud(A,0);
setValeur(A,1);
}
Programme main
Les primitives des arbres binaires
2
Récupérer la valeur d’un nœud
int getValeur(ArbreB *p)
{
if(p) return p->val;
else
return -1;
}
main()
{
ArbreB *A;
A=allouer_espace_noeud();
A=initialiser_noeud(A,1);
int a= getValeur(A);
}
Programme main
Les primitives des arbres binaires
2
Changer le fils gauche resp le fils droit d’un nœud
void setFils_gauche(ArbreB *r,ArbreB *p_fils)
{
if(r) r->fg=p_fils;
else
printf("opération non autorisée");
}
void setFils_droit(ArbreB *r,ArbreB *p_fils)
{
if(r) r->fd=p_fils;
else
printf("opération non autorisée");
}
main()
{
ArbreB *A,*B,*C;
A=allouer_espace_noeud(); B=allouer_espace_noeud(); C=allouer_espace_noeud();
A=initialiser_noeud(A,1); B=initialiser_noeud(B,2); C=initialiser_noeud(C,3);
setFils_gauche(A,B);
setFils_droit(A,C);
}
Programme main
Les primitives des arbres binaires
3
Récupérer le fils gauche resp le fils droit d’un nœud
ArbreB * getFils_gauche(ArbreB *p)
{
if(p) return p->fg;
else
Return NULL;
}
ArbreB * getFils_droit(ArbreB *p)
{
if(p) return p->fd;
else
Return NULL;
}
main()
{
ArbreB *A,*B,*C;
A=allouer_espace_noeud(); B=allouer_espace_noeud(); C=allouer_espace_noeud();
A=initialiser_noeud(A,1); B=initialiser_noeud(B,2); C=initialiser_noeud(C,3);
setFils_gauche(A,B); setFils_droit(A,C);
ArbreB *p_fg=getFils_gauche(A); ArbreB *p_fd=getFils_droit(A);
}
Programme main
Les primitives des arbres binaires
3
Application 1
1
2 3
4 5 6 7
8
 Créer l’arbre suivant :
 En utilisant pour chaque nœud
un pointeur
 En utilisant un seul pointeur
(pointeur de la racine)
 Afficher l’arbre:
 En utilisant le pointeur de
chaque nœud
 En utilisant le pointeur de la
racine
Les primitives des arbres binaires
3
Calculer la taille d’un arbre: nombre de nœuds
int taille_arbre(ArbreB *A)
{
if (estVide(A))
return 0;
else
return
1+taille_arbre(getFils_gauche(A))+taille_arbre(getFils_droit(A));
}
Les parcours d’un arbre binaire
3
Parcours en profondeur
Préfixé
Infixé
Postfixé
Parcours en largeur
Par niveau
Les parcours d’un arbre binaire
3
• Trois parcours possibles :
– préfixé (préordre): (R,G,D)
• on traite la racine,
• puis le sous-arbre gauche,
• puis le sous-arbre droit
– infixé (projectif ou symétrique) : (G,R,D)
• on traite le sous-arbre gauche,
• puis la racine,
• puis le sous-arbre droit
– postfixé (ordre terminal) : (G,D,R)
• on traite le sous-arbre gauche,
• le sous-arbre droit,
• puis la racine!!!!
Les parcours d’un arbre binaire
3
Exemples de parcours :
• Préfixé : R-A-B-C-D-E
• Infixé : B-A-C-R-D-E
• Postfixé : B-C-A-E-D-R
R
A
B C
D
E
Les parcours d’un arbre binaire
3
Arbre binaire ordonné :
• La chaîne infixée des
valeurs est ordonnée
• Tous les éléments dans le
sous-arbre gauche d’un
nœud lui sont inférieurs
• Tous les éléments dans son
sous-arbre droit lui sont
supérieurs
12
6
5 8
15
18
Les parcours d’un arbre binaire
3
Parcours préfixé récursif :
void prefixe(tnoeud *racine)
{
if(racine != NULL)
{
traiter(racine);
prefixe(racinegauche);
prefixe(racinedroite);
}
}
12
6
5 8
15
18
1
2
3
Les parcours d’un arbre binaire
3
Parcours en profondeur
Prefixe : implémentation récursive
 Traiter la racine
 Traiter le sous arbre gauche
 Traiter le sous arbre droit
void preFixe(ArbreB *A)
{
if (!estVide(A))
{
printf("%i ",A->val);
preFixe(A->fg);
preFixe(A->fd);
}
}
1 2 4 5 8 3 6 7
Les parcours d’un arbre binaire
3
Parcours infixé récursif :
void infixe(tnoeud *racine)
{
if(racine != NULL)
{
infixe(racinegauche);
traiter(racine);
infixe(racinedroite);
}
}
12
6
5 8
15
18
2
1
3
Les parcours d’un arbre binaire
4
Parcours en profondeur
Infixé: implémentation récursive
 Traiter le sous arbre gauche
 Traiter la racine
 Traiter le sous arbre droit
void inFixe(ArbreB *A)
{
if (!estVide(A))
{
inFixe(A->fg);
printf("%i ",A->val);
inFixe(A->fd);
}
}
4 2 5 8 1 6 3 7
Les parcours d’un arbre binaire
4
Parcours infixé récursif :
void postfixe(tnoeud *racine)
{
if(racine != NULL)
{
postfixe(racinegauche);
postfixe(racinedroite);
traiter(racine);
}
}
12
6
5 8
15
18
3
2
3
Les parcours d’un arbre binaire
4
Parcours en profondeur
Postfixé : implémentation récursive
 Traiter le sous arbre gauche
 Traiter le sous arbre droit
 Traiter la racine
void postFixe(ArbreB *A)
{
if (!estVide(A))
{
postFixe(A->fg);
postFixe(A->fd);
printf("%i ",A->val);
}
}
4 8 5 2 6 7 3 1
Les parcours d’un arbre binaire
4
Parcours en profondeur
Prefixe: implémentation itérative (étape 1: semi itérative)
1 2 4 5 8 3 6 7
void preFixe_it_etape1(ArbreB *A)
{
ArbreB *pt;
pt=A;
while(!(estVide(pt)))
{
printf("n%i",pt->val);
preFixe_it_etape1(getFils_gauche(pt));
pt=getFils_droit(pt);
}
}
Les parcours d’un arbre binaire
4
Parcours en profondeur
1 2 4 5 8 3 6 7
void preFixe_it_etape2(ArbreB *A)
{
Pile *pil;
Initialiser_pile();
int f;
ArbreB *pt;
pt=A;
while(!(estVide(pt))||pile!=NULL)
{
while(!(estVide(pt)))
{
printf("n%i",pt->val);
Empilier(pt);
pt=getFils_gauche(pt);
}
pt=Depiler(pt);
pt=getFils_droit(pt);
}
}
Prefixe: implémentation itérative (étape 2)
Il faut une pile pour
préserver les valeurs
successives de la racine et
passer au sous-arbre droit à
chaque retou.
Autres opérations sur les arbres binaires
4
Calcul de la taille d’un arbre binaire
int taille(tnoeud *racine)
{
if(racine == NULL) return 0;
else
return 1+ taille(racinegauche) + taille(racinedroite);
}
Nombre de feuilles d’un arbre binaire
int nbfeuille(tnoeud *racine)
{
if(racine == NULL) return 0 ;
if(feuille(racine) ) return 1 ;
return nbfeuille(racinegauche)
+ nbfeuille(racinedroite)
}
int feuille(tnoeud *nœud)
{
return !nœudgauche
&& !nœuddroite;
}
Avec :
Autres opérations sur les arbres binaires
Vérifier qu’un arbre n’est pas dégénéré
int nondegener(tnoeud *racine)
{
if(racine = = NULL) return 0;
if((racinegauche != NULL ) && (racinedroite != NULL)
return 1;
if(racinegauche = = NULL)
return nondegener(racinedroite);
return nondegener(racinegauche);
}
Autres opérations sur les arbres binaires
Recherche par association dans un arbre binaire
int rechAssoc(tnoeud *racine , telement val)
{
if(racine = = NULL) return 0 ;
if (racineinfo = = val ) return 1;
if (rechAssoc(racinegauche , val)) return 1;
return rechAssoc(racinedroite ,val) ;
}
Autres opérations sur les arbres binaires
Recherche par association dans un arbre binaire ordonné
int rechDichoAssoc(tnoeud *racine , telement val)
{
if(racine == NULL)
return 0;
if (racineinfo ==val )
return 1;
if (racineinfo < val )
return rechDichoAssoc(racinedroite ,val) ;
return rechDichoAssoc(racinegauche,val) ;
}
L’arbre est ordonné =>
On peut choisir le sous-arbre
dans lequel il faut rechercher val
Autres opérations sur les arbres binaires
Insertion dans un arbre binaire ordonné (1)
• L’insertion doit maintenir l’ordre
• Si racine = NULL, on crée un nœud racine avec
l’élément à insérer
• Sinon on parcourt l’arbre en recherchant le nœud
père de l’élément à insérer, puis on crée une feuille
à rattacher à ce nœud, du bon côté
• Ce nœud père est soit une feuille soit un nœud
avec un seul sous-arbre
• Il vérifie (pèreinfo <= val et pèredroite=NULL)
ou (pèreinfo > val et pèregauche=NULL)
Autres opérations sur les arbres binaires
Insertion dans un arbre binaire ordonné (2)
50
30
25 35
70
8060
33 65
• Insertion de 27
• Le nœud père est 25
• 27 doit être inséré en
sous-arbre droit
 Insertion de 50
 Le nœud père est 60
 50 doit être inséré en
sous-arbre gauche
27 50
Autres opérations sur les arbres binaires
Insertion dans un arbre binaire ordonné (3)
void creeFeuille(tnoeud **feuille , telement val )
{
*feuille=(tnoeud *)malloc(sizeof(tnoeud);
(*feuille)info =val;
(*feuille)gauche=NULL;
(*feuille)droite=NULL;
}
void insertion(tnoeud **racine , telement val)
{
if(*racine == NULL) creeFeuille( racine,val);
else
if( val >= (*racine)info)
insertion(&((*racine)droite ),val);
else
insertion(&((*racine)gauche) , val) ;
}
Avec :
Les arbres binaires
5
 Un arbre binaire est dit de recherche si :
 Pendant l’insertion, je dois respecter un ordre
 Le fils à gauche est inférieur à la racine
 Le fils à droite est supérieur ou égal à la racine
 Un arbre binaire est dit complet si :
 Chaque nœud non terminal a exactement deux fils
 Un arbre binaire est dit parfait (presque complet) :
 Tous les niveaux sont complètement remplis sauf
éventuellement le dernier, et
dans ce cas les feuilles sont le plus à gauche possible
 Arbre binaire équilibrée : La différence de hauteur entre 2 frères
ne peut dépasser 1
Les arbres binaires
5
Conclusion :
• Beaucoup d’applications : B-arbres, analyse
syntaxique, etc.
• Généralisation des listes
• La recherche est généralement
proportionnelle à la hauteur de l’arbre,
intéressant si l’arbre est bien géré, c’est-à-
dire dont la hauteur est proche du log de la
taille
• L’implantation chaînée est généralement la
plus adaptée
Les arbres binaires
5
Application :
Développer une application qui implémente la structure de données
suivantes pour permettre des recherches sur une liste dynamique
d’étudiants suivant deux clés : recherche par matricule et recherche par
moyenne.

Contenu connexe

Tendances

Travaux dirigés 1: algorithme & structures de données (corrigés)
Travaux dirigés 1: algorithme & structures de données (corrigés)Travaux dirigés 1: algorithme & structures de données (corrigés)
Travaux dirigés 1: algorithme & structures de données (corrigés)
Ines Ouaz
 
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Mansouri Khalifa
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
pierrepo
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage C
Mohamed Lahby
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
ECAM Brussels Engineering School
 
Cours langage c
Cours langage cCours langage c
Cours langage c
coursuniv
 
Langage C#
Langage C#Langage C#
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
webreaker
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de recherche
Sana Aroussi
 
Cours algo: Les pointeurs
Cours algo: Les pointeursCours algo: Les pointeurs
Cours algo: Les pointeurs
Sana REFAI
 
Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)
Sana Aroussi
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
Aziz Darouichi
 
Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019
Aziz Darouichi
 
Architecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
Architecture des ordinateurs Elaboré par- ABIDA Mounir.pptArchitecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
Architecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
wafawafa52
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
Shellmates
 
Chapitre 2 plus court chemin
Chapitre 2 plus court cheminChapitre 2 plus court chemin
Chapitre 2 plus court chemin
Sana Aroussi
 
Cours.langage c
Cours.langage cCours.langage c
Cours.langage c
Yasmine Long
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java Héritage
NadaBenLatifa
 

Tendances (20)

Travaux dirigés 1: algorithme & structures de données (corrigés)
Travaux dirigés 1: algorithme & structures de données (corrigés)Travaux dirigés 1: algorithme & structures de données (corrigés)
Travaux dirigés 1: algorithme & structures de données (corrigés)
 
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
Cours Piles et files en utilisant lesl istes chainées Prof. KHALIFA MANSOURI
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Les listes simplement chaînées en langage C
Les listes simplement chaînées en langage CLes listes simplement chaînées en langage C
Les listes simplement chaînées en langage C
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
Cours langage c
Cours langage cCours langage c
Cours langage c
 
Langage C#
Langage C#Langage C#
Langage C#
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de recherche
 
Cours algo: Les pointeurs
Cours algo: Les pointeursCours algo: Les pointeurs
Cours algo: Les pointeurs
 
Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)Chapitre 5 structures hierarchiques (arbres)
Chapitre 5 structures hierarchiques (arbres)
 
Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
 
Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019Chapitre3TableauxEnCppV2019
Chapitre3TableauxEnCppV2019
 
Architecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
Architecture des ordinateurs Elaboré par- ABIDA Mounir.pptArchitecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
Architecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
TP C++ : Correction
 
Récursivité
RécursivitéRécursivité
Récursivité
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
Chapitre 2 plus court chemin
Chapitre 2 plus court cheminChapitre 2 plus court chemin
Chapitre 2 plus court chemin
 
Cours.langage c
Cours.langage cCours.langage c
Cours.langage c
 
Exercice 1 java Héritage
Exercice 1 java HéritageExercice 1 java Héritage
Exercice 1 java Héritage
 

Similaire à Cours : les arbres Prof. KHALIFA MANSOURI

Chapitre 13_Les arbres.pptx
Chapitre 13_Les arbres.pptxChapitre 13_Les arbres.pptx
Chapitre 13_Les arbres.pptx
AbdenourMohammedi1
 
A_5_StructuresRecursives_ARBRES_BINAIRES_2020_2021.pdf
A_5_StructuresRecursives_ARBRES_BINAIRES_2020_2021.pdfA_5_StructuresRecursives_ARBRES_BINAIRES_2020_2021.pdf
A_5_StructuresRecursives_ARBRES_BINAIRES_2020_2021.pdf
hamza201710
 
06 arbres
06 arbres06 arbres
06 arbres
AhmedBelad1
 
Graphes
GraphesGraphes
Graphes
Hadi Youssef
 
fichiers arborescents
fichiers arborescentsfichiers arborescents
fichiers arborescents
Abdessalem Oumellal
 
Cours complet Base de donne Bac
Cours complet Base de donne Bac Cours complet Base de donne Bac
Cours complet Base de donne Bac
Amri Ossama
 

Similaire à Cours : les arbres Prof. KHALIFA MANSOURI (6)

Chapitre 13_Les arbres.pptx
Chapitre 13_Les arbres.pptxChapitre 13_Les arbres.pptx
Chapitre 13_Les arbres.pptx
 
A_5_StructuresRecursives_ARBRES_BINAIRES_2020_2021.pdf
A_5_StructuresRecursives_ARBRES_BINAIRES_2020_2021.pdfA_5_StructuresRecursives_ARBRES_BINAIRES_2020_2021.pdf
A_5_StructuresRecursives_ARBRES_BINAIRES_2020_2021.pdf
 
06 arbres
06 arbres06 arbres
06 arbres
 
Graphes
GraphesGraphes
Graphes
 
fichiers arborescents
fichiers arborescentsfichiers arborescents
fichiers arborescents
 
Cours complet Base de donne Bac
Cours complet Base de donne Bac Cours complet Base de donne Bac
Cours complet Base de donne Bac
 

Plus de Mansouri Khalifa

Cours bases de données partie 2 Prof. Khalifa MANSOURI
Cours bases de données partie 2 Prof. Khalifa MANSOURICours bases de données partie 2 Prof. Khalifa MANSOURI
Cours bases de données partie 2 Prof. Khalifa MANSOURI
Mansouri Khalifa
 
Cours bases de données partie 1 Prof. Khalifa MANSOURI
Cours bases de données partie 1 Prof. Khalifa MANSOURICours bases de données partie 1 Prof. Khalifa MANSOURI
Cours bases de données partie 1 Prof. Khalifa MANSOURI
Mansouri Khalifa
 
Cours systèmes temps réel partie 2 Prof. Khalifa MANSOURI
Cours  systèmes temps réel partie 2 Prof. Khalifa MANSOURICours  systèmes temps réel partie 2 Prof. Khalifa MANSOURI
Cours systèmes temps réel partie 2 Prof. Khalifa MANSOURI
Mansouri Khalifa
 
Cours systèmes temps réel partie 1 Prof. Khalifa MANSOURI
Cours  systèmes temps réel partie 1 Prof. Khalifa MANSOURICours  systèmes temps réel partie 1 Prof. Khalifa MANSOURI
Cours systèmes temps réel partie 1 Prof. Khalifa MANSOURI
Mansouri Khalifa
 
Cours guvernance des systèmes d'information partie 3 prof. Khalifa MANSOURI
Cours guvernance des systèmes d'information partie 3 prof. Khalifa MANSOURICours guvernance des systèmes d'information partie 3 prof. Khalifa MANSOURI
Cours guvernance des systèmes d'information partie 3 prof. Khalifa MANSOURI
Mansouri Khalifa
 
Cours guvernance des systèmes d'information partie 2 prof. Khalifa MANSOURI
Cours guvernance des systèmes d'information partie 2 prof. Khalifa MANSOURICours guvernance des systèmes d'information partie 2 prof. Khalifa MANSOURI
Cours guvernance des systèmes d'information partie 2 prof. Khalifa MANSOURI
Mansouri Khalifa
 
Cours guvernance des systèmes d'information partie 1 prof. Khalifa MANSOURI
Cours guvernance des systèmes d'information partie 1 prof. Khalifa MANSOURICours guvernance des systèmes d'information partie 1 prof. Khalifa MANSOURI
Cours guvernance des systèmes d'information partie 1 prof. Khalifa MANSOURI
Mansouri Khalifa
 
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Mansouri Khalifa
 
UML Part 6 diagramme etat transition mansouri
UML Part 6 diagramme etat transition mansouriUML Part 6 diagramme etat transition mansouri
UML Part 6 diagramme etat transition mansouri
Mansouri Khalifa
 
UML Part 5- diagramme d'activités mansouri
UML Part 5- diagramme d'activités mansouriUML Part 5- diagramme d'activités mansouri
UML Part 5- diagramme d'activités mansouri
Mansouri Khalifa
 
UML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouriUML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouri
Mansouri Khalifa
 
UML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouriUML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouri
Mansouri Khalifa
 
UML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouriUML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouri
Mansouri Khalifa
 
UML Part1-Introduction Mansouri
UML Part1-Introduction MansouriUML Part1-Introduction Mansouri
UML Part1-Introduction Mansouri
Mansouri Khalifa
 
Systèmes d'Information dans les organisations
Systèmes d'Information dans les organisationsSystèmes d'Information dans les organisations
Systèmes d'Information dans les organisations
Mansouri Khalifa
 
Analyse merise Prof. Khalifa MANSOURI
Analyse merise Prof. Khalifa MANSOURIAnalyse merise Prof. Khalifa MANSOURI
Analyse merise Prof. Khalifa MANSOURI
Mansouri Khalifa
 

Plus de Mansouri Khalifa (16)

Cours bases de données partie 2 Prof. Khalifa MANSOURI
Cours bases de données partie 2 Prof. Khalifa MANSOURICours bases de données partie 2 Prof. Khalifa MANSOURI
Cours bases de données partie 2 Prof. Khalifa MANSOURI
 
Cours bases de données partie 1 Prof. Khalifa MANSOURI
Cours bases de données partie 1 Prof. Khalifa MANSOURICours bases de données partie 1 Prof. Khalifa MANSOURI
Cours bases de données partie 1 Prof. Khalifa MANSOURI
 
Cours systèmes temps réel partie 2 Prof. Khalifa MANSOURI
Cours  systèmes temps réel partie 2 Prof. Khalifa MANSOURICours  systèmes temps réel partie 2 Prof. Khalifa MANSOURI
Cours systèmes temps réel partie 2 Prof. Khalifa MANSOURI
 
Cours systèmes temps réel partie 1 Prof. Khalifa MANSOURI
Cours  systèmes temps réel partie 1 Prof. Khalifa MANSOURICours  systèmes temps réel partie 1 Prof. Khalifa MANSOURI
Cours systèmes temps réel partie 1 Prof. Khalifa MANSOURI
 
Cours guvernance des systèmes d'information partie 3 prof. Khalifa MANSOURI
Cours guvernance des systèmes d'information partie 3 prof. Khalifa MANSOURICours guvernance des systèmes d'information partie 3 prof. Khalifa MANSOURI
Cours guvernance des systèmes d'information partie 3 prof. Khalifa MANSOURI
 
Cours guvernance des systèmes d'information partie 2 prof. Khalifa MANSOURI
Cours guvernance des systèmes d'information partie 2 prof. Khalifa MANSOURICours guvernance des systèmes d'information partie 2 prof. Khalifa MANSOURI
Cours guvernance des systèmes d'information partie 2 prof. Khalifa MANSOURI
 
Cours guvernance des systèmes d'information partie 1 prof. Khalifa MANSOURI
Cours guvernance des systèmes d'information partie 1 prof. Khalifa MANSOURICours guvernance des systèmes d'information partie 1 prof. Khalifa MANSOURI
Cours guvernance des systèmes d'information partie 1 prof. Khalifa MANSOURI
 
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
Cours les Listes doublement chainées Prof. KHALIFA MANSOURI
 
UML Part 6 diagramme etat transition mansouri
UML Part 6 diagramme etat transition mansouriUML Part 6 diagramme etat transition mansouri
UML Part 6 diagramme etat transition mansouri
 
UML Part 5- diagramme d'activités mansouri
UML Part 5- diagramme d'activités mansouriUML Part 5- diagramme d'activités mansouri
UML Part 5- diagramme d'activités mansouri
 
UML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouriUML Part 4- diagrammres de classes et d'objets mansouri
UML Part 4- diagrammres de classes et d'objets mansouri
 
UML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouriUML Part 3- diagramme de séquences mansouri
UML Part 3- diagramme de séquences mansouri
 
UML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouriUML Part2- diagramme des uses cases_mansouri
UML Part2- diagramme des uses cases_mansouri
 
UML Part1-Introduction Mansouri
UML Part1-Introduction MansouriUML Part1-Introduction Mansouri
UML Part1-Introduction Mansouri
 
Systèmes d'Information dans les organisations
Systèmes d'Information dans les organisationsSystèmes d'Information dans les organisations
Systèmes d'Information dans les organisations
 
Analyse merise Prof. Khalifa MANSOURI
Analyse merise Prof. Khalifa MANSOURIAnalyse merise Prof. Khalifa MANSOURI
Analyse merise Prof. Khalifa MANSOURI
 

Dernier

Auguste Herbin.pptx Peintre français
Auguste   Herbin.pptx Peintre   françaisAuguste   Herbin.pptx Peintre   français
Auguste Herbin.pptx Peintre français
Txaruka
 
1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x
NadineHG
 
1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif
NadineHG
 
Techno Revo et nations (1789-1848) ).pdf
Techno Revo et nations (1789-1848) ).pdfTechno Revo et nations (1789-1848) ).pdf
Techno Revo et nations (1789-1848) ).pdf
NadineHG
 
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdfMÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
lebaobabbleu
 
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
Editions La Dondaine
 
A1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdfA1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdf
lebaobabbleu
 
Compréhension orale La famille de Sophie (12).pdf
Compréhension orale  La famille de Sophie (12).pdfCompréhension orale  La famille de Sophie (12).pdf
Compréhension orale La famille de Sophie (12).pdf
lebaobabbleu
 
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGESGUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
DjibrilToure5
 

Dernier (9)

Auguste Herbin.pptx Peintre français
Auguste   Herbin.pptx Peintre   françaisAuguste   Herbin.pptx Peintre   français
Auguste Herbin.pptx Peintre français
 
1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x1e geo metropolisation metropolisation x
1e geo metropolisation metropolisation x
 
1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif1e Espaces productifs 2024.Espaces productif
1e Espaces productifs 2024.Espaces productif
 
Techno Revo et nations (1789-1848) ).pdf
Techno Revo et nations (1789-1848) ).pdfTechno Revo et nations (1789-1848) ).pdf
Techno Revo et nations (1789-1848) ).pdf
 
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdfMÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
MÉDIATION ORALE - MON NOUVEL APPARTEMENT.pdf
 
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
La Révolution Bénédictine Casadéenne du Livradois-Forez: De Charlemagne à Fra...
 
A1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdfA1- Compréhension orale - présentations.pdf
A1- Compréhension orale - présentations.pdf
 
Compréhension orale La famille de Sophie (12).pdf
Compréhension orale  La famille de Sophie (12).pdfCompréhension orale  La famille de Sophie (12).pdf
Compréhension orale La famille de Sophie (12).pdf
 
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGESGUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
GUIDE POUR L’EVRAS BALISES ET APPRENTISSAGES
 

Cours : les arbres Prof. KHALIFA MANSOURI

  • 1. Structures de données arborescentes Les arbres 1 Prof. M. Khalifa MANSOURI Université Hassan II de Casablanca ENSET de Mohammedia Département Mathématiques et Informatique
  • 2. Structures de données arborescentes 2 Pour faire fonctionner correctement et efficacement son programme, un programmeur doit toujours chercher la bonne méthode pour organiser les données. Ainsi, le choix de la structure de données est déterminante. Il existe quatre grandes classes de structures : Les structures de données séquentielles (tableaux) ; Les structures de données linéaires (liste chaînées) ; Les arbres ; Les graphes. Introduction
  • 3. Structures de données arborescentes 3  Inconvénient des structures séquentielles  En format contigu, les mises à jour sont fastidieuses et coûteuses  En format chaîné, les parcours sont de complexité linaire  Les structurations arborescentes permettent une amélioration globale des accès aux informations. Introduction
  • 4. Structures de données arborescentes 4  Arbre généalogique  Organigramme d’une entreprise  Table des matières d’un livre  Les expressions arithmétiques  Tournois sportifs  Le décisionnel  Classification : par questionnaire binaire  Nœud= question, feuille = réponse, branche gauche étiquetée par faux et branche droite par vrai  Recherche : par arbre binaire de recherche (ou ordonné)  Files de priorité : par arbre tournoi : gestion des tampons avec priorité Application des arbres : Buts des Structures arborescentes  Organisation hiérarchique des informations : intuitive et conforme à beaucoup de situations :
  • 5. Structures de données arborescentes 5  Arbre = graphe purement hiérarchique  pas de cycle  un seul chemin d’un nœud à un autre  Arbre binaire = tout nœud a au plus deux fils  Liste = arbre dégénéré  Forêt = ensemble d’arbres Classification des structures Graphes Arbres Arbres binaires Listes Piles Files Forêt Autres
  • 6. Les Arbres en général 6 Définition récursive d’un arbre  Un arbre est:  Vide  Ou constitué d’un élément (information ou valeur) et d’un ou plusieurs arbres Définitions : …
  • 7. Les Arbres en général 7 Définitions, Terminologies : A B C D E H J I  A: racine  A,B,C,D,E,F,G,H,I,J: nœuds ou sommets  B,C,E: sous arbres  D,F,G,H,I,J: sous arbres  Tout sous arbre est un arbre  D,E,F,G,H,I,J: Feuilles ou nœuds terminaux  Un nœud peut être fils d’un autre: B est fils de A, F est fils de B  Un nœud peut être père d’un autre: A est père de B et C, B est père de D,E,F et G  Tout chemin de la racine à une feuille est une branche F G
  • 8. Les Arbres en général 8 Définitions, Terminologies : • R, A, B, C, D,E : nœuds ou sommets • R racine, D - E sous-arbre, A – B – C sous- arbre • Un nœud peut être fils d’un autre – C est un fils de A • Un nœud peut être père d’un autre – D est le père de E, A est le père de C • B, C, E sont des nœuds terminaux ou feuilles • Tout chemin de la racine à une feuille est une branche : R – A – C est une branche R A B C D E
  • 9. Les Arbres en général 9 Définitions, Terminologies : • Nœuds d’un même niveau = issus d’un même nœud avec même nb de filiations : R=Niveau 0, A,D = Niveau 1 et B,C,E = Niveau 2 • Parcours en largeur = par niveau  R-A-D-B-C-E • Taille d’un arbre = nb de nœuds = ici 6 • Hauteur d’un arbre = niveau maximum = ici 2 • Arbre dégénéré = au plus un descendant par nœud R A B C D E Niv 0 Niv 1 Niv 2
  • 10. Les Arbres en général 1 Définitions, Terminologies :  Taille d’un arbre= nombre de nœuds: ici, 10  Chemin : une séquence n1 n2 · · ·nk de nœuds telle que, pour tout 1 <=i < k : ni+1 appartient à Succ(ni). On dit que ce chemin va de n1 à nk.  Longueur d’un chemin n1n2 · · ·nk est le nombre k de nœuds qui le composent.  Hauteur d’un arbre= Longueur du plus long chemin partant de la racine: ici, 3  Profondeur d’un nœud= longueur du chemin allant de la racine à ce nœud.  Arbre dégénéré: au plus un descendant par nœud.  Une liste chainée est arbre dégénéré Définition récursive de la hauteur  la hauteur d’un arbre est égale à la hauteur de sa racine  la hauteur d’un arbre vide est nulle  la hauteur d’un nœud est égale au maximum des hauteurs de ses sous-arbres plus un
  • 11. Les Arbres en général 1 Définitions, Terminologies : • Hauteur d’un nœud : Nombre d’arcs séparant ce nœud à la feuille la plus loin accessible depuis ce nœud. • Hauteur de l’arbre : longueur de sa plus longue branche • Définition récursive de la hauteur d’un arbre :  la hauteur d’un arbre est égale à la hauteur de sa racine  la hauteur d’un arbre ne contenant que la racine est nulle : les feuilles ont une hauteur nulle  La hauteur d’une arbre vide est fixée par convention à -1  la hauteur d’un nœud est égale au maximum des hauteurs de ses sous-arbres plus un R A B C D E
  • 15. Des cas particuliers 1  Arbres ordonnés: souvent, on fixe un ordre pour les fils pour augmenter l’efficacité des algorithmes  Arbre n-aires: Souvent on fixe le nombre de fils pour limiter la complexité. Un arbre n-aires, il possède au plus n fils.  Arbre binaire: c’est un cas particulier des arbres n-aires (n=2)
  • 16. Les arbres binaires 1 Représentation graphique d’un arbre binaire  graphique  Parenthésée : R(A(B,C),D(,E))  chaînée typedef struct _tnœud { struct _tnoeud *gauche; telement info; struct _tnoeud *droite; }tnoeud; racine R A B C D E
  • 17. Les arbres binaires 1 Représentation graphique d’un arbre binaire 1 2 3 4 5 6 7 8Nœud= { Information: <T>; fils_gauche: nœud; fils_droit:nœud; }  Racine: pointeur  Élément à gauche: pointeur  Élément à droite pointeur
  • 18. Les arbres binaires 1 Définition  Dans un arbre binaire, chaque nœud a au plus deux fils  Plus généralement, si chaque nœud a au plus n fils, l’arbre est n-aire  Un arbre binaire est soit vide ou contient un arbre gauche (fils gauche) et un arbre droit (fils droit)  Un arbre binaire est vide ou composé d’un élément auquel sont rattachés un sous-arbre gauche et un sous-arbre droit
  • 19. Les arbres binaires 1 Définition d’arbre binaire : • Notation parenthésée : R ( A (B,C), D (, E)) • On peut manipuler un arbre binaire avec trois primitives :  valeur d’un nœud,  fils gauche d’un nœud et  fils droit d’un nœud. R A B C D E
  • 20. Les arbres binaires 2 Exemple 1 2 3 4 5 6 7 8 Notation avec parenthèses 1(2(4,5(,8)),3(6,7))
  • 21. Les arbres binaires 2 Manipulation : On manipule un arbre à l’aide des éléments suivants:  Le contenu du nœud  L’adresse du nœud à gauche  L’adresse du nœud à droite L’information pour signaler qu’un nœud (X) n’a pas de fils gauche (X->fg=NULL) ou n’a pas de fils droit (X->fd=NULL) est importante Arbre binaire complet : • Chaque nœud non terminal a exactement deux fils • Arbre binaire complet au sens large ou arbre parfait :  l’avant-dernier niveau est complet  les feuilles du dernier niveau sont groupées le plus à gauche possible
  • 22. Les arbres binaires 2 Structure de données : typedef struct Element { <T> val; // T peut représenter n’importe quel type Element *fg; Element *fd; } ArbreB;
  • 23. Les primitives des arbres binaires 2  Allouer l’espace pour un nœud  Initialiser un nœud : sa valeur et ses fils  Changer la valeur d’un nœud  Récupérer la valeur d’un nœud  Changer le fils gauche d’un nœud  Changer le fils droit d’un nœud  Récupérer le fils gauche  Récupérer le fils droit  Tester si un nœud est une feuille
  • 24. Les primitives des arbres binaires 2 Allouer l’espace mémoire pour un nœud ArbreB *allouer_espace_noeud() { ArbreB *p; p=(ArbreB*) malloc(sizeof(ArbreB)); return p; } main() { ArbreB *A; A=allouer_espace_noeud(); printf("adresse de A : %d",A); } Programme main
  • 25. Les primitives des arbres binaires 2 Initialiser un nœud ArbreB *initialiser_noeud(ArbreB *p, int v) { p->val=v; p->fg=NULL; p->fd=NULL; return p; } main() { ArbreB *A; A=allouer_espace_noeud(); A=initialiser_noeud(A,1); } Programme main
  • 26. Les primitives des arbres binaires 2 Vérifier si un nœud est vide int estVide(ArbreB *p) { if(p==NULL) return 1; return 0; } main() { ArbreB *A; A=allouer_espace_noeud(); A=initialiser_noeud(A,1); if (!estVide(A)) printf("n%i",A->val); else prinft(“noeud vide”); } Programme main
  • 27. Les primitives des arbres binaires 2 Changer la valeur d’un nœud void setValeur(ArbreB *p, int v) { if(p) p->val=v; else Printf(« opération non autorisée »); } main() { ArbreB *A; A=allouer_espace_noeud(); A=initialiser_noeud(A,0); setValeur(A,1); } Programme main
  • 28. Les primitives des arbres binaires 2 Récupérer la valeur d’un nœud int getValeur(ArbreB *p) { if(p) return p->val; else return -1; } main() { ArbreB *A; A=allouer_espace_noeud(); A=initialiser_noeud(A,1); int a= getValeur(A); } Programme main
  • 29. Les primitives des arbres binaires 2 Changer le fils gauche resp le fils droit d’un nœud void setFils_gauche(ArbreB *r,ArbreB *p_fils) { if(r) r->fg=p_fils; else printf("opération non autorisée"); } void setFils_droit(ArbreB *r,ArbreB *p_fils) { if(r) r->fd=p_fils; else printf("opération non autorisée"); } main() { ArbreB *A,*B,*C; A=allouer_espace_noeud(); B=allouer_espace_noeud(); C=allouer_espace_noeud(); A=initialiser_noeud(A,1); B=initialiser_noeud(B,2); C=initialiser_noeud(C,3); setFils_gauche(A,B); setFils_droit(A,C); } Programme main
  • 30. Les primitives des arbres binaires 3 Récupérer le fils gauche resp le fils droit d’un nœud ArbreB * getFils_gauche(ArbreB *p) { if(p) return p->fg; else Return NULL; } ArbreB * getFils_droit(ArbreB *p) { if(p) return p->fd; else Return NULL; } main() { ArbreB *A,*B,*C; A=allouer_espace_noeud(); B=allouer_espace_noeud(); C=allouer_espace_noeud(); A=initialiser_noeud(A,1); B=initialiser_noeud(B,2); C=initialiser_noeud(C,3); setFils_gauche(A,B); setFils_droit(A,C); ArbreB *p_fg=getFils_gauche(A); ArbreB *p_fd=getFils_droit(A); } Programme main
  • 31. Les primitives des arbres binaires 3 Application 1 1 2 3 4 5 6 7 8  Créer l’arbre suivant :  En utilisant pour chaque nœud un pointeur  En utilisant un seul pointeur (pointeur de la racine)  Afficher l’arbre:  En utilisant le pointeur de chaque nœud  En utilisant le pointeur de la racine
  • 32. Les primitives des arbres binaires 3 Calculer la taille d’un arbre: nombre de nœuds int taille_arbre(ArbreB *A) { if (estVide(A)) return 0; else return 1+taille_arbre(getFils_gauche(A))+taille_arbre(getFils_droit(A)); }
  • 33. Les parcours d’un arbre binaire 3 Parcours en profondeur Préfixé Infixé Postfixé Parcours en largeur Par niveau
  • 34. Les parcours d’un arbre binaire 3 • Trois parcours possibles : – préfixé (préordre): (R,G,D) • on traite la racine, • puis le sous-arbre gauche, • puis le sous-arbre droit – infixé (projectif ou symétrique) : (G,R,D) • on traite le sous-arbre gauche, • puis la racine, • puis le sous-arbre droit – postfixé (ordre terminal) : (G,D,R) • on traite le sous-arbre gauche, • le sous-arbre droit, • puis la racine!!!!
  • 35. Les parcours d’un arbre binaire 3 Exemples de parcours : • Préfixé : R-A-B-C-D-E • Infixé : B-A-C-R-D-E • Postfixé : B-C-A-E-D-R R A B C D E
  • 36. Les parcours d’un arbre binaire 3 Arbre binaire ordonné : • La chaîne infixée des valeurs est ordonnée • Tous les éléments dans le sous-arbre gauche d’un nœud lui sont inférieurs • Tous les éléments dans son sous-arbre droit lui sont supérieurs 12 6 5 8 15 18
  • 37. Les parcours d’un arbre binaire 3 Parcours préfixé récursif : void prefixe(tnoeud *racine) { if(racine != NULL) { traiter(racine); prefixe(racinegauche); prefixe(racinedroite); } } 12 6 5 8 15 18 1 2 3
  • 38. Les parcours d’un arbre binaire 3 Parcours en profondeur Prefixe : implémentation récursive  Traiter la racine  Traiter le sous arbre gauche  Traiter le sous arbre droit void preFixe(ArbreB *A) { if (!estVide(A)) { printf("%i ",A->val); preFixe(A->fg); preFixe(A->fd); } } 1 2 4 5 8 3 6 7
  • 39. Les parcours d’un arbre binaire 3 Parcours infixé récursif : void infixe(tnoeud *racine) { if(racine != NULL) { infixe(racinegauche); traiter(racine); infixe(racinedroite); } } 12 6 5 8 15 18 2 1 3
  • 40. Les parcours d’un arbre binaire 4 Parcours en profondeur Infixé: implémentation récursive  Traiter le sous arbre gauche  Traiter la racine  Traiter le sous arbre droit void inFixe(ArbreB *A) { if (!estVide(A)) { inFixe(A->fg); printf("%i ",A->val); inFixe(A->fd); } } 4 2 5 8 1 6 3 7
  • 41. Les parcours d’un arbre binaire 4 Parcours infixé récursif : void postfixe(tnoeud *racine) { if(racine != NULL) { postfixe(racinegauche); postfixe(racinedroite); traiter(racine); } } 12 6 5 8 15 18 3 2 3
  • 42. Les parcours d’un arbre binaire 4 Parcours en profondeur Postfixé : implémentation récursive  Traiter le sous arbre gauche  Traiter le sous arbre droit  Traiter la racine void postFixe(ArbreB *A) { if (!estVide(A)) { postFixe(A->fg); postFixe(A->fd); printf("%i ",A->val); } } 4 8 5 2 6 7 3 1
  • 43. Les parcours d’un arbre binaire 4 Parcours en profondeur Prefixe: implémentation itérative (étape 1: semi itérative) 1 2 4 5 8 3 6 7 void preFixe_it_etape1(ArbreB *A) { ArbreB *pt; pt=A; while(!(estVide(pt))) { printf("n%i",pt->val); preFixe_it_etape1(getFils_gauche(pt)); pt=getFils_droit(pt); } }
  • 44. Les parcours d’un arbre binaire 4 Parcours en profondeur 1 2 4 5 8 3 6 7 void preFixe_it_etape2(ArbreB *A) { Pile *pil; Initialiser_pile(); int f; ArbreB *pt; pt=A; while(!(estVide(pt))||pile!=NULL) { while(!(estVide(pt))) { printf("n%i",pt->val); Empilier(pt); pt=getFils_gauche(pt); } pt=Depiler(pt); pt=getFils_droit(pt); } } Prefixe: implémentation itérative (étape 2) Il faut une pile pour préserver les valeurs successives de la racine et passer au sous-arbre droit à chaque retou.
  • 45. Autres opérations sur les arbres binaires 4 Calcul de la taille d’un arbre binaire int taille(tnoeud *racine) { if(racine == NULL) return 0; else return 1+ taille(racinegauche) + taille(racinedroite); } Nombre de feuilles d’un arbre binaire int nbfeuille(tnoeud *racine) { if(racine == NULL) return 0 ; if(feuille(racine) ) return 1 ; return nbfeuille(racinegauche) + nbfeuille(racinedroite) } int feuille(tnoeud *nœud) { return !nœudgauche && !nœuddroite; } Avec :
  • 46. Autres opérations sur les arbres binaires Vérifier qu’un arbre n’est pas dégénéré int nondegener(tnoeud *racine) { if(racine = = NULL) return 0; if((racinegauche != NULL ) && (racinedroite != NULL) return 1; if(racinegauche = = NULL) return nondegener(racinedroite); return nondegener(racinegauche); }
  • 47. Autres opérations sur les arbres binaires Recherche par association dans un arbre binaire int rechAssoc(tnoeud *racine , telement val) { if(racine = = NULL) return 0 ; if (racineinfo = = val ) return 1; if (rechAssoc(racinegauche , val)) return 1; return rechAssoc(racinedroite ,val) ; }
  • 48. Autres opérations sur les arbres binaires Recherche par association dans un arbre binaire ordonné int rechDichoAssoc(tnoeud *racine , telement val) { if(racine == NULL) return 0; if (racineinfo ==val ) return 1; if (racineinfo < val ) return rechDichoAssoc(racinedroite ,val) ; return rechDichoAssoc(racinegauche,val) ; } L’arbre est ordonné => On peut choisir le sous-arbre dans lequel il faut rechercher val
  • 49. Autres opérations sur les arbres binaires Insertion dans un arbre binaire ordonné (1) • L’insertion doit maintenir l’ordre • Si racine = NULL, on crée un nœud racine avec l’élément à insérer • Sinon on parcourt l’arbre en recherchant le nœud père de l’élément à insérer, puis on crée une feuille à rattacher à ce nœud, du bon côté • Ce nœud père est soit une feuille soit un nœud avec un seul sous-arbre • Il vérifie (pèreinfo <= val et pèredroite=NULL) ou (pèreinfo > val et pèregauche=NULL)
  • 50. Autres opérations sur les arbres binaires Insertion dans un arbre binaire ordonné (2) 50 30 25 35 70 8060 33 65 • Insertion de 27 • Le nœud père est 25 • 27 doit être inséré en sous-arbre droit  Insertion de 50  Le nœud père est 60  50 doit être inséré en sous-arbre gauche 27 50
  • 51. Autres opérations sur les arbres binaires Insertion dans un arbre binaire ordonné (3) void creeFeuille(tnoeud **feuille , telement val ) { *feuille=(tnoeud *)malloc(sizeof(tnoeud); (*feuille)info =val; (*feuille)gauche=NULL; (*feuille)droite=NULL; } void insertion(tnoeud **racine , telement val) { if(*racine == NULL) creeFeuille( racine,val); else if( val >= (*racine)info) insertion(&((*racine)droite ),val); else insertion(&((*racine)gauche) , val) ; } Avec :
  • 52. Les arbres binaires 5  Un arbre binaire est dit de recherche si :  Pendant l’insertion, je dois respecter un ordre  Le fils à gauche est inférieur à la racine  Le fils à droite est supérieur ou égal à la racine  Un arbre binaire est dit complet si :  Chaque nœud non terminal a exactement deux fils  Un arbre binaire est dit parfait (presque complet) :  Tous les niveaux sont complètement remplis sauf éventuellement le dernier, et dans ce cas les feuilles sont le plus à gauche possible  Arbre binaire équilibrée : La différence de hauteur entre 2 frères ne peut dépasser 1
  • 53. Les arbres binaires 5 Conclusion : • Beaucoup d’applications : B-arbres, analyse syntaxique, etc. • Généralisation des listes • La recherche est généralement proportionnelle à la hauteur de l’arbre, intéressant si l’arbre est bien géré, c’est-à- dire dont la hauteur est proche du log de la taille • L’implantation chaînée est généralement la plus adaptée
  • 54. Les arbres binaires 5 Application : Développer une application qui implémente la structure de données suivantes pour permettre des recherches sur une liste dynamique d’étudiants suivant deux clés : recherche par matricule et recherche par moyenne.