SlideShare une entreprise Scribd logo
1  sur  54
Télécharger pour lire hors ligne
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

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 CMohamed Lahby
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siNarûtö Bàl'Sèm
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)rezgui mohamed
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexitéSana Aroussi
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en pythonMariem ZAOUALI
 
exercices base de données - sql
exercices  base de données - sql exercices  base de données - sql
exercices base de données - sql Yassine Badri
 
Examen principal - Algorithme & Structures de données
Examen principal - Algorithme & Structures de donnéesExamen principal - Algorithme & Structures de données
Examen principal - Algorithme & Structures de donnéesInes Ouaz
 
Cours algorithme: structures répétitives
Cours algorithme: structures répétitivesCours algorithme: structures répétitives
Cours algorithme: structures répétitivesInforMatica34
 
exercices Corrigées du merise
exercices Corrigées du  meriseexercices Corrigées du  merise
exercices Corrigées du meriseYassine Badri
 
Merise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMerise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMajid CHADAD
 
Exercices sur-python-turtle-corrige
Exercices sur-python-turtle-corrigeExercices sur-python-turtle-corrige
Exercices sur-python-turtle-corrigeWajihBaghdadi1
 
Travaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de DonnéesTravaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de DonnéesAnass41
 
Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données IIRiadh Bouslimi
 

Tendances (20)

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
 
Programmation Java
Programmation JavaProgrammation Java
Programmation Java
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 si
 
Cours structures des données (langage c)
Cours structures des données (langage c)Cours structures des données (langage c)
Cours structures des données (langage c)
 
Chapitre 2 complexité
Chapitre 2 complexitéChapitre 2 complexité
Chapitre 2 complexité
 
Chap4 Récursivité en python
Chap4 Récursivité en pythonChap4 Récursivité en python
Chap4 Récursivité en python
 
exercices base de données - sql
exercices  base de données - sql exercices  base de données - sql
exercices base de données - sql
 
Examen principal - Algorithme & Structures de données
Examen principal - Algorithme & Structures de donnéesExamen principal - Algorithme & Structures de données
Examen principal - Algorithme & Structures de données
 
Cours algorithme: structures répétitives
Cours algorithme: structures répétitivesCours algorithme: structures répétitives
Cours algorithme: structures répétitives
 
exercices Corrigées du merise
exercices Corrigées du  meriseexercices Corrigées du  merise
exercices Corrigées du merise
 
Merise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigésMerise+ +exercices+mcd+-+corrigés
Merise+ +exercices+mcd+-+corrigés
 
Exercices sur-python-turtle-corrige
Exercices sur-python-turtle-corrigeExercices sur-python-turtle-corrige
Exercices sur-python-turtle-corrige
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
TP C++ : enoncé
 
Travaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de DonnéesTravaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de Données
 
TP C++ : Correction
TP C++ : CorrectionTP C++ : Correction
TP C++ : Correction
 
pile file.pptx
pile file.pptxpile file.pptx
pile file.pptx
 
Chapitre 1 rappel
Chapitre 1 rappelChapitre 1 rappel
Chapitre 1 rappel
 
Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données II
 
Récursivité
RécursivitéRécursivité
Récursivité
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 

Similaire à Cours : les arbres Prof. KHALIFA MANSOURI

Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheSana Aroussi
 
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.pdfhamza201710
 
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 (7)

Chapitre 13_Les arbres.pptx
Chapitre 13_Les arbres.pptxChapitre 13_Les arbres.pptx
Chapitre 13_Les arbres.pptx
 
Chapitre 1 arbres de recherche
Chapitre 1 arbres de rechercheChapitre 1 arbres de recherche
Chapitre 1 arbres de recherche
 
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 MANSOURIMansouri 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 MANSOURIMansouri 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 MANSOURIMansouri 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 MANSOURIMansouri 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 MANSOURIMansouri 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 MANSOURIMansouri 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 MANSOURIMansouri 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 mansouriMansouri 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 mansouriMansouri 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 mansouriMansouri 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 mansouriMansouri 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_mansouriMansouri Khalifa
 
UML Part1-Introduction Mansouri
UML Part1-Introduction MansouriUML Part1-Introduction Mansouri
UML Part1-Introduction MansouriMansouri 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 organisationsMansouri Khalifa
 
Analyse merise Prof. Khalifa MANSOURI
Analyse merise Prof. Khalifa MANSOURIAnalyse merise Prof. Khalifa MANSOURI
Analyse merise Prof. Khalifa MANSOURIMansouri Khalifa
 

Plus de Mansouri Khalifa (15)

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
 
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

Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre françaisTxaruka
 
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptxPrésentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptxJCAC
 
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfVulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfSylvianeBachy
 
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...Bibdoc 37
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 37
 
Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Gabriel Gay-Para
 
Chana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienneChana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienneTxaruka
 
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptxDIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptxMartin M Flynn
 
Newsletter SPW Agriculture en province du Luxembourg du 10-04-24
Newsletter SPW Agriculture en province du Luxembourg du 10-04-24Newsletter SPW Agriculture en province du Luxembourg du 10-04-24
Newsletter SPW Agriculture en province du Luxembourg du 10-04-24BenotGeorges3
 
La Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdfLa Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdfbdp12
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx   Film     françaisPas de vagues.  pptx   Film     français
Pas de vagues. pptx Film françaisTxaruka
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfRiDaHAziz
 
Bibdoc 2024 - Les intelligences artificielles en bibliotheque.pdf
Bibdoc 2024 - Les intelligences artificielles en bibliotheque.pdfBibdoc 2024 - Les intelligences artificielles en bibliotheque.pdf
Bibdoc 2024 - Les intelligences artificielles en bibliotheque.pdfBibdoc 37
 
Apprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceursApprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceursStagiaireLearningmat
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx      Film   françaisPas de vagues.  pptx      Film   français
Pas de vagues. pptx Film françaisTxaruka
 
Bibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdf
Bibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdfBibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdf
Bibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdfBibdoc 37
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfRiDaHAziz
 

Dernier (18)

Bernard Réquichot.pptx Peintre français
Bernard Réquichot.pptx   Peintre françaisBernard Réquichot.pptx   Peintre français
Bernard Réquichot.pptx Peintre français
 
Bulletin des bibliotheques Burkina Faso mars 2024
Bulletin des bibliotheques Burkina Faso mars 2024Bulletin des bibliotheques Burkina Faso mars 2024
Bulletin des bibliotheques Burkina Faso mars 2024
 
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptxPrésentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
Présentation - Initiatives - CECOSDA - OIF - Fact Checking.pptx
 
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdfVulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
Vulnérabilité numérique d’usage : un enjeu pour l’aide à la réussitepdf
 
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
Bibdoc 2024 - L’Éducation aux Médias et à l’Information face à l’intelligence...
 
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdfBibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
Bibdoc 2024 - Les maillons de la chaine du livre face aux enjeux écologiques.pdf
 
Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)Faut-il avoir peur de la technique ? (G. Gay-Para)
Faut-il avoir peur de la technique ? (G. Gay-Para)
 
Chana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienneChana Orloff.pptx Sculptrice franco-ukranienne
Chana Orloff.pptx Sculptrice franco-ukranienne
 
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptxDIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
DIGNITAS INFINITA - DIGNITÉ HUMAINE; déclaration du dicastère .pptx
 
Newsletter SPW Agriculture en province du Luxembourg du 10-04-24
Newsletter SPW Agriculture en province du Luxembourg du 10-04-24Newsletter SPW Agriculture en province du Luxembourg du 10-04-24
Newsletter SPW Agriculture en province du Luxembourg du 10-04-24
 
La Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdfLa Base unique départementale - Quel bilan, au bout de 5 ans .pdf
La Base unique départementale - Quel bilan, au bout de 5 ans .pdf
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx   Film     françaisPas de vagues.  pptx   Film     français
Pas de vagues. pptx Film français
 
PIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdfPIE-A2-P 5- Supports stagiaires.pptx.pdf
PIE-A2-P 5- Supports stagiaires.pptx.pdf
 
Bibdoc 2024 - Les intelligences artificielles en bibliotheque.pdf
Bibdoc 2024 - Les intelligences artificielles en bibliotheque.pdfBibdoc 2024 - Les intelligences artificielles en bibliotheque.pdf
Bibdoc 2024 - Les intelligences artificielles en bibliotheque.pdf
 
Apprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceursApprendre avec des top et nano influenceurs
Apprendre avec des top et nano influenceurs
 
Pas de vagues. pptx Film français
Pas de vagues.  pptx      Film   françaisPas de vagues.  pptx      Film   français
Pas de vagues. pptx Film français
 
Bibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdf
Bibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdfBibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdf
Bibdoc 2024 - Sobriete numerique en bibliotheque et centre de documentation.pdf
 
PIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdfPIE-A2-P4-support stagiaires sept 22-validé.pdf
PIE-A2-P4-support stagiaires sept 22-validé.pdf
 

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.