death2note
5
Parcours d'arbres
1
2
4
8
3
5
9
6
7
10
Préfixe : 1, 2, 4, 8, 9, 5, 10, 3, 6, 7
(VGD)
Infixe : 8, 4, 9, 2, 10, 5, 1, 6, 3, 7
(GVD)
Suffixe : 8, 9, 4, 10, 5, 2, 6, 7, 3, 1
(GDV)
X, Petite classe 7
5
typedef struct Noeud
{
Element contenu; struct Noeud *filsG; struct Noeud *filsD;
}*Arbre;
void ParcoursPrefixe(Arbre a)
{
if (a != NULL )
{
printf("%3d", a->contenu);
ParcoursPrefixe(a->filsG);
ParcoursPrefixe(a->filsD);
}
}
X, Petite classe 7
5
void ParcoursInfixe(Arbre a)
{
if (a != NULL )
{
ParcoursInfixe(a->filsG); printf("%3d", a->contenu);
ParcoursInfixe(a->filsD);
}
}
void ParcoursSuffixe(Arbre a)
{
if (a != NULL )
{
ParcoursSuffixe(a->filsG);
ParcoursSuffixe(a->filsD);
printf("%3d", a->contenu);
}
}
X, Petite classe 7
5
Arbres de recherche
15
19
12
14
8
10
13
16
21
17
Propriété de base : Pour chaque noeud de valeur v, les noeuds du sous-arbre gauche ont une valeur
< v et ceux du sous-arbre droit ont une valeur > v.
X, Petite classe 7
5
Exercices
(1) Montrer que le parcours infixe ordonne les nœuds par valeur croissante. (2) Montrer que si un nœud a deux fils, son successeur dans l'ordre infixe n'a pas de fils gauche et son prédécesseur n'a pas de fils droit.
(3) Montrer que le successeur du nœud n est le sommet le plus à gauche dans le sous-arbre droit issu de n.
X, Petite classe 7
5
Recherche
Arbre Recherche(Element v, Arbre a)
{
if (a == NULL || v == a->contenu) return a; if (v < a->contenu) return Recherche(v, a->filsG); return Recherche(v, a->filsD);
}
X, Petite classe 7
5
Ajout d'un élément
Arbre NouvelArbre(Element v, Arbre a,
Arbre b)
{
Arbre c; }
c = (Arbre)malloc (sizeof (struct Noeud )); c->contenu = v; c->filsG = a; c->filsD = b; return c;
void AjouterArbre(Element v, Arbre *ap)
{
Arbre a = *ap;
}
if (a == NULL ) a = NouvelArbre(v, NULL ,