You are on page 1of 32

Un arbre est une structure composée de noeuds et de feuilles (noeuds

terminaux) reliés par des branches. On le représente généralement en


mettant la racine en haut et les feuilles en bas (contrairement à un arbre
réel).
Un graphe est connexe si deux quelconques de ses noeuds sont reliés par
un chemin.
Une forêt est un ensemble d’arbres.

Licence IGI 2011 () Arbres binaires March 21, 2011 1 / 13


– Le noeud A est la racine de l’arbre.
– Les noeuds E, I, J, M, L et H sont des feuilles.
– Les noeuds B, C, D, F, G et K sont des noeuds intermédiaires.
– Si une branche relie un noeud ni à un noeud nj situé plus bas, on dit que
ni est un ancêtre de nj .
– Dans un arbre, un noeud n’a qu’un seul pére (ancêtre direct).
– Un noeud peut contenir une ou plusieurs valeurs.
– La hauteur (ou profondeur) d’un noeud est la longueur du chemin qui le
lie à la racine.
Licence IGI 2011 () Arbres binaires March 21, 2011 2 / 13
Dé…nition arbre binaire.
Un arbre binaire est un arbre tel que les noeuds ont au plus deux …ls
(gauche et droit).
Exemple d’arbre binaire

Licence IGI 2011 () Arbres binaires March 21, 2011 3 / 13


Dé…nition arbre binaire de recherche.
Un arbre binaire de recherche est un arbre binaire qui possède la propriété
fondamentale suivante:
– tous les noeuds du sous-arbre de gauche d’un noeud de l’arbre ont une
valeur inférieure ou égale à la sienne.
– tous les noeuds du sous-arbre de droite d’un noeud de l’arbre ont une
valeur supérieure ou égale à la sienne.

Licence IGI 2011 () Arbres binaires March 21, 2011 4 / 13


Licence IGI 2011 () Arbres binaires March 21, 2011 5 / 13
Structure d’un arbre binaire Chaque noeud de la structure doit contenir
un champs
pour les données, et deux pointeurs : un vers le …ls gauche et un vers le
…ls droit.
noeud
data <type de donnees>
…lsGauche <pointeur vers noeud>
…lsDroit <pointeur vers noeud>
…n noeud
struct noeud
{
int valeur;
noeud * …lsGauche;
noeud * …lsDroit;
};

Licence IGI 2011 () Arbres binaires March 21, 2011 6 / 13


Recherche dans l’arbre
Un arbre binaire de recherche est fait pour faciliter la recherche
d’informations.
La recherche d’un noeud particulier de l’arbre peut être dé…nie simplement
de manière récursive:
Soit un sous-arbre de racine ni ,
– si la valeur recherchée est celle de la racine ni „ alors la recherche est
terminée. On a trouvé le noeud recherché.
– sinon, si ni , est une feuille (pas de …ls) alors la recherche est infructueuse
et l’algorithme se termine.
– si la valeur recherchée est plus grande que celle de la racine alors on
explore le sous-arbre de droite c’est à dire que l’on remplace ni par son
noeud …ls de droite et que l’on relance la procédure de recherche à partir
de cette nouvelle racine.

Licence IGI 2011 () Arbres binaires March 21, 2011 7 / 13


Exemple d’arbre binaire de recherche

Licence IGI 2011 () Arbres binaires March 21, 2011 8 / 13


– de la même manière, si la valeur recherchée est plus petite que la valeur
de ni , on remplace ni par son noeud …ls de gauche avant de relancer la
procédure.
Si l’arbre est équilibré chaque itération divise par 2 le nombre de noeuds
candidats. La complexité est donc en O(log2 n) si n est le nombre de
noeuds de l’arbre.

Licence IGI 2011 () Arbres binaires March 21, 2011 9 / 13


Version itérative

arbre* chercherI(int x, Arbre *a)


{
while(a != null && x != a->contenu)
if (x < a->contenu)
a = a->…lsGauche;
else
a = a->…lsDroite;
return a;
}

Licence IGI 2011 () Arbres binaires March 21, 2011 10 / 13


Version récursive

arbre *Arbre chercher(int x, Arbre* a)


{
if (a == null jj x == a->contenu)
return a;
if (x < a->contenu)
return chercher(x, a->…lsGauche);
return chercher(x, a->…lsDroite);
}
Cette méthode retourne null si l’arbre a ne contient pas x. Ceci inclut le
cas o u l’arbre est vide.

Licence IGI 2011 () Arbres binaires March 21, 2011 11 / 13


Ajout d’un élément
Pour conserver les propriétés d’un arbre binaire de recherche nécessite de,
l’ajout d’un nouvel élément ne peut pas se faire n’importe comment.
L’algorithme récursif d’ajout d’un élément peut s’exprimer ainsi:
– soit x la valeur de l’élément à insérer.
– soit v la valeur du noeud racine ni d’un sous-arbre.
– si ni n’existe pas, le créer avec la valeur x. …n.
– sinon
– si x est plus grand que v,
– remplacer ni par son …ls droit.
– recommencer l’algorithme à partir de la nouvelle racine.
– sinon
– remplacer ni par son …ls gauche.
– recommencer l’algorithme à partir de la nouvelle racine.

Licence IGI 2011 () Arbres binaires March 21, 2011 12 / 13


Ajout de 5 dans l’arbre

Licence IGI 2011 () Arbres binaires March 21, 2011 13 / 13


Supprimer une clé
7
3 9
1 4 8
5

3 niveaux de difficulté:

I Supprimer une feuille

I Supprimer un sommet qui n’a qu’un fils

I Supprimer un sommet qui a deux fils

18
Supprimer une clé
7
3 9
1 4 8
5

3 niveaux de difficulté:

I Supprimer une feuille (exemple: k = 5):

I Supprimer un sommet qui n’a qu’un fils

I Supprimer un sommet qui a deux fils

18
Supprimer une clé
7
3 9
1 4 8
5

3 niveaux de difficulté:

I Supprimer une feuille (exemple: k = 5):


• Trivial. Il suffit de l’enlever.

I Supprimer un sommet qui n’a qu’un fils

I Supprimer un sommet qui a deux fils

18
Supprimer une clé
7
3 9
1 4 8

3 niveaux de difficulté:

I Supprimer une feuille (exemple: k = 5):


• Trivial. Il suffit de l’enlever.

I Supprimer un sommet qui n’a qu’un fils

I Supprimer un sommet qui a deux fils

18
Supprimer une clé
7
3 9
1 4 8
5

3 niveaux de difficulté:

I Supprimer une feuille (exemple: k = 5):


• Trivial. Il suffit de l’enlever.

I Supprimer un sommet qui n’a qu’un fils

I Supprimer un sommet qui a deux fils

18
Supprimer une clé
7
3 9
1 4 8
5

3 niveaux de difficulté:

I Supprimer une feuille (exemple: k = 5):


• Trivial. Il suffit de l’enlever.

I Supprimer un sommet qui n’a qu’un fils (exemple: k = 4).

I Supprimer un sommet qui a deux fils

18
Supprimer une clé
7
3 9
1 4 8
5

3 niveaux de difficulté:

I Supprimer une feuille (exemple: k = 5):


• Trivial. Il suffit de l’enlever.

I Supprimer un sommet qui n’a qu’un fils (exemple: k = 4).


• Facile. Il suffit de l’enlever, et de faire de l’unique fils un fils
du père du sommet supprimé = remonter l’unique fils d’un
niveau.

I Supprimer un sommet qui a deux fils

18
Supprimer une clé
7
3 9
1 5 8

3 niveaux de difficulté:

I Supprimer une feuille (exemple: k = 5):


• Trivial. Il suffit de l’enlever.

I Supprimer un sommet qui n’a qu’un fils (exemple: k = 4).


• Facile. Il suffit de l’enlever, et de faire de l’unique fils un fils
du père du sommet supprimé = remonter l’unique fils d’un
niveau.

I Supprimer un sommet qui a deux fils

18
Supprimer une clé
7
3 9
1 4 8
5

3 niveaux de difficulté:

I Supprimer une feuille (exemple: k = 5):


• Trivial. Il suffit de l’enlever.

I Supprimer un sommet qui n’a qu’un fils (exemple: k = 4).


• Facile. Il suffit de l’enlever, et de faire de l’unique fils un fils
du père du sommet supprimé = remonter l’unique fils d’un
niveau.

I Supprimer un sommet qui a deux fils

18
Supprimer une clé
7
3 9
1 4 8
5

3 niveaux de difficulté:

I Supprimer une feuille (exemple: k = 5):


• Trivial. Il suffit de l’enlever.

I Supprimer un sommet qui n’a qu’un fils (exemple: k = 4).


• Facile. Il suffit de l’enlever, et de faire de l’unique fils un fils
du père du sommet supprimé = remonter l’unique fils d’un
niveau.

I Supprimer un sommet qui a deux fils (exemple: k = 7).


• Moins facile.
Le cas moins facile: supprimer un sommet s d’arité 2
7
3 9
1 4 8
5

Supprimer un sommet s qui a deux fils

19
Le cas moins facile: supprimer un sommet s d’arité 2
7
3 9
1 4 8
5

Supprimer un sommet s qui a deux fils (exemple: k = 7).

19
Le cas moins facile: supprimer un sommet s d’arité 2
7
3 9
1 4 8
5

Supprimer un sommet s qui a deux fils (exemple: k = 7).


I On cherche l’élément g de clé maximum dans son sous-arbre
gauche

19
Le cas moins facile: supprimer un sommet s d’arité 2
7
3 9
1 4 8
5

Supprimer un sommet s qui a deux fils (exemple: k = 7).


I On cherche l’élément g de clé maximum dans son sous-arbre
gauche (sur l’exemple: g est l’élément de clé 5).
Le cas moins facile: supprimer un sommet s d’arité 2
7
3 9
1 4 8
5

Supprimer un sommet s qui a deux fils (exemple: k = 7).


I On cherche l’élément g de clé maximum dans son sous-arbre
gauche (sur l’exemple: g est l’élément de clé 5).

I On échange le contenu du sommet s par le contenu du


sommet g .

19
Le cas moins facile: supprimer un sommet s d’arité 2
5
3 9
1 4 8
7

Supprimer un sommet s qui a deux fils (exemple: k = 7).


I On cherche l’élément g de clé maximum dans son sous-arbre
gauche (sur l’exemple: g est l’élément de clé 5).

I On échange le contenu du sommet s par le contenu du


sommet g .

19
Le cas moins facile: supprimer un sommet s d’arité 2
5
3 9
1 4 8
7

Supprimer un sommet s qui a deux fils (exemple: k = 7).


I On cherche l’élément g de clé maximum dans son sous-arbre
gauche (sur l’exemple: g est l’élément de clé 5).

I On échange le contenu du sommet s par le contenu du


sommet g .

I On supprime g .

19
Le cas moins facile: supprimer un sommet s d’arité 2
5
3 9
1 4 8

Supprimer un sommet s qui a deux fils (exemple: k = 7).


I On cherche l’élément g de clé maximum dans son sous-arbre
gauche (sur l’exemple: g est l’élément de clé 5).

I On échange le contenu du sommet s par le contenu du


sommet g .

I On supprime g .

19
Le cas moins facile: supprimer un sommet s d’arité 2
5
3 9
1 4 8

Supprimer un sommet s qui a deux fils (exemple: k = 7).


I On cherche l’élément g de clé maximum dans son sous-arbre
gauche (sur l’exemple: g est l’élément de clé 5).

I On échange le contenu du sommet s par le contenu du


sommet g .

I On supprime g .

Remarques:
I g n’a pas de fils droit (sinon, il ne serait pas maximum).
I g est donc dans le cas trivial, ou facile, si on veut le supprimer.