recherche dans un arbre binaire avec un autre critère que celui du tri

recherche dans un arbre binaire avec un autre critère que celui du tri - Algo - Programmation

Marsh Posté le 27-04-2008 à 23:58:05    

Bonsoir, c'est pour un coup de main  [:bcastelli]  
Merci de votre aide.
 
j'ai un arbre binaire équilibré trié selon un critère, et je souhaite faire une recherche selon un autre critère.
 
J'ai donc un parcourt de l'arbre à faire.  
 
Je dispose des opérateur '=',
 
Avec Ada, le prototype de mon unité englobante :

Code :
  1. function Get (Code : In T_Code;
  2.                      From : in T_word_Tree) return T_Word;


 
le type T_Word

Code :
  1. type T_Word is
  2.   record
  3.      The_pattern : Patterns.T_Pattern := Patterns.Null_Pattern;
  4.      The_Code    : Codes.T_Code := Codes.Null_Code;
  5.   end record;


 
La recherche à faire, doit l'être sur le critère T_Code.
 
 
edit : je ne dispose pas des opérateur '<' et '>'
 
Le type T_Word_Tree peut-être :

Code :
  1. type T_Node;
  2.   type Node_Access is access T_Node;
  3.   type T_Node is
  4.      record
  5.         The_Word : T_Word;
  6.         Left, Rigth : Node_Access;
  7.      end record;
  8.  
  9.   type T_Words_Tree is
  10.      record
  11.         Root : Node_Access;
  12.         Count : Natural := 0;
  13.      end record;


Message édité par Profil supprimé le 28-04-2008 à 00:22:31
Reply

Marsh Posté le 27-04-2008 à 23:58:05   

Reply

Marsh Posté le 29-04-2008 à 23:00:39    

Bonsoir, je up, j'ai pas trouvé :/

Reply

Marsh Posté le 29-04-2008 à 23:30:00    

Ah si, zut, il semblerait que j'ai trouvé :)
 
Avec Ada, une fonction récursive ...

Code :
  1. function R_Get(Code : in Codes.T_Code;
  2.                    Root : in Node_Access) return T_Word is
  3.        The_Word : T_Word := Null_Word;
  4.  begin
  5.     if Root.The_Word.The_Code = Code then
  6.        return Root.The_Word;
  7.     else
  8.        if (Root.Left /= null) then
  9.           The_Word :=  R_Get(Code, Root.Left);
  10.        end if;
  11.        if The_Word.The_Code = Code then
  12.           return The_Word;
  13.        end if;
  14.        if (Root.Rigth /= null) then
  15.              The_Word := R_Get(Code, Root.Rigth);
  16.        end if;
  17.        if The_Word.The_Code = Code then
  18.           return The_Word;
  19.        end if;
  20.     end if;
  21.     return Null_Word;
  22.  end R_Get;
  23.  
  24.  
  25.  
  26.   function Get(Code : in Codes.T_Code;
  27.                From : in T_Words_tree) return T_Word is
  28.  
  29.   begin
  30.      return R_Get(Code, From.Root);
  31.   end Get;


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed