next up previous
Next: Les fichiers Up: Une structure non-linéaire : Previous: Une structure non-linéaire :

Création d'un arbre binaire

Un arbre binaire peut être créé en définissant un type correspondant à un n tex2html_wrap1406 ud de l'arbre. Soit par exemple :

type arbre = ^noeud;
     noeud = record
                   valeur : integer;
                   gauche : arbre;
                   droit  : arbre;
             end;
Une telle structure peut être utilisée pour ordonner des éléments, en considérant que le sous-arbre gauche d'un n tex2html_wrap1406 ud contient les éléments situés l'élément correspondant au n tex2html_wrap1406 ud, tandis que le sous-arbre droit contient les éléments situés l'élément associé au n tex2html_wrap1406 ud considéré (figure 6.7). Un exemple d'arbre binaire est donné par la figure 6.8

  figure451
Figure:  

  figure456
Figure 6.8:  Un exemple d'arbre binaire

Une telle structure est pratique pour effectuer des tris rapides. Le programme suivant permet de créer un arbre d'entiers, de le construire à partir d'une suite de nombres entrés par l'utilisateur, et ensuite de se servir de cet arbre pour afficher par ordre croissant les nombres entrés par l'utilisateur.

program arbresbinaires;

type 
    pointeur = ^noeud;
    noeud = record
               valeur : integer;
               gauche : pointeur;
               droit : pointeur;
            end;

var racine : pointeur;
    n : integer;

procedure construire(var arbre : pointeur; elt : integer);

   begin
      if (arbre=nil) then
         begin
            new(arbre);
            arbre^.valeur:=elt;
            arbre^.gauche:=nil;
            arbre^.droit:=nil;
         end
      else		    
           if elt<arbre^.valeur then
              construire(arbre^.gauche, elt)
           else if elt>arbre^.valeur then
              construire(arbre^.droit, elt);
end;

procedure afficher(arbre : pointeur);
   begin
     if not(arbre=nil) then
       begin
          afficher(arbre^.gauche);
          writeln(arbre^.valeur);
          afficher(arbre^.droit);
       end;
   end;    

begin     
      racine:=nil; (* Pascal n'initialise pas les pointeurs a nil *)
      write('entrez un nombre:');
      readln(n);
      while (n>=0) do
          begin
              construire(racine, n);
              write('entrez un nombre : '); 
              readln(n); 
          end;
      afficher(racine);
end.



Frederic Mesnard
mardi, 15 décembre 1998, 16:13:24 GMT+4