Les arbres binaires 

Introduction
La structure d'arbre est l'une des plus importantes et des plus spécifiques de l'informatique. Elle est utilisée par exemple pour l’organisation des fichiers dans les systèmes d'exploitation, la représentation d'une table des matières, d'un arbre généalogique, etc.

Dans cette leçon, l’accent sera mise sur les arbres binaires qui sont un cas particulier des arbres généraux. Une propriété intrinsèque de la structure d’arbre est la récursivité.

Définitions
Un arbre binaire B est un ensemble de noeuds qui est soit vide, soit composé d’une racine et de deux arbres binaires disjoints appelés sousarbre droit et sous-arbre gauche.

  • Le père du sommet x est le sommet p tel qu'il existe un arc entre p et x (seule la racine de l’arbre n’a pas de père).
  • Le frère de x est un sommet qui a le même père.
  • Le sous-arbre droit (resp. gauche) d'un arbre binaire B est le sous-arbre qui a pour racine le fils droit (resp. gauche) de B.
  • Un noeud interne est un sommet qui a au moins un fils (gauche ou droit ou les deux).
  • Une feuille est un sommet qui n'a pas de fils.
  • La hauteur d'un sommet x est la longueur (en nombre d'arcs) du plus long chemin de x à une feuille.
  • La hauteur d'un arbre est égale à la hauteur de la racine.

Création d’un arbre binaire

Un arbre binaire peut être créé en définissant un type correspondant à un noeud de l’arbre. Soit par exemple :

Types
Arbre = ^Noeud
Noeud = Struct
    Valeur : Entier
    Gauche : Arbre
    Droite : Arbre
FinStruct

Une telle structure peut être utilisée pour ordonner des éléments, en considérant que le sous-arbre gauche d’un noeud de valeur n contient les éléments inférieurs à n, tandis que le sous-arbre droit contient les
éléments supérieurs n

Une telle structure est pratique pour effectuer des tris rapides. L’algorithme suivant permet de construire un arbre d’entiers à partir d’une suite de nombres entrés par l’utilisateur.

Algorithme ArbreBinaire
Types
   Arbre = ^Noeud
   Noeud = Struct
       Valeur : Entier
       Gauche : Arbre
       Droite : Arbre
    FinStruct
Variables
racine : Arbre
x : Entier
Procédure Construire(Elt : Entier ; Var B : Arbre)
Début
Si
(B = Nil) Alors
Allouer(B)
B^.valeur ¬ Elt
B^.gauche ¬ Nil
B^.droite ¬ Nil
Sinon Si (Elt < B^.valeur) Alors Construire(Elt,B^.gauche)
Sinon Si (Elt > B^.valeur) Alors Construire(Elt,B^.droite)
FinSi
FinSi
FinSi
Fin
Début
racine = Nil

Ecrire(”Entrer un entier : ”)

Lire(x)

TantQue (x # 0) Faire

   Construire(x,racine)

   Ecrire(”Entrer un entier :”)

   Lire(x)

FinTQ
Fin.

 

Recherche dans un arbre binaire ordonné

Fonction Recherche(x : Entier ; B : Arbre) : Booléen
Début
Si
(B = Nil) Alors
Recherche ¬ Faux
Sinon
Si
(x = B^.valeur) Alors
Recherche ¬ Vrai
Sinon
Si
(x < B^.valeur) Alors
Recherche(x, B^.gauche)
Sinon
Recherche(x, B^.droite)
FinSi
FinSi
FinSi
Fin

 

Arbres binaires particuliers

  • Un arbre binaire complet possède 2P+1 noeuds (nombre impair) dont P sommets internes et P+1 feuilles.
  • On appelle arbre binaire parfait un arbre binaire (complet) tel que chaque sommet est le père de deux sous-arbres de même hauteur.
  • Un arbre binaire parfait possède 2h+1-1 sommets, où h est la hauteur de l'arbre.
  • On appelle arbre binaire quasi-parfait un arbre binaire parfait éventuellement grignoté d'un étage en bas à droite.
  • arbre binaire complet un arbre binaire tel que chaque sommet possède 0 ou 2 fils.

 

Parcours d’un arbre binaire
On cherche à parcourir un arbre binaire selon une stratégie dite « en profondeur d’abord » ou dans l’ordre préfixe illustré sur le diagramme ci-dessous :

Les éléments doivent être affichés dans l’ordre suivant : 0 1 2 3 4 5 6.

 

Procédure ParcoursPréfixe(B : Arbre)
Début
Si
(B # Nil) Alors
Afficher(B^.valeur)
ParcoursPréfixe(B^.gauche)
ParcoursPréfixe(B^.droite)
FinSi
Fin

 

Procédure ParcoursInfixe(B : Arbre)
Début
Si
(B # Nil) Alors
ParcoursInfixe(B^.droite)
Ecrire(B^.valeur)
ParcoursInfixe(B^.gauche)
FinSi
Fin

 


Procédure
ParcoursPostfixe(B : Arbre)
Début
Si
(B # Nil) Alors
ParcoursPostfixe (B^.droite)
ParcoursPostfixe (B^.gauche)
Ecrire(B^.valeur)
FinSi
Fin

آخر تعديل: الجمعة، 11 مارس 2022، 11:12 PM