with Ada.Text_Io; use Ada.Text_Io; with Ada.Integer_text_Io; use Ada.Integer_Text_Io; procedure td5 is type t_noeud; type t_pointeur is access t_noeud; type t_noeud is record gauche : t_pointeur; info : integer; droit : t_pointeur; end record; procedure initialiser_arbre(racine : in out t_pointeur) is begin racine := null; end initialiser_arbre; procedure ajouter_feuille(racine : in out t_pointeur; valeur : in integer) is begin if racine = null then racine := new t_noeud; racine.info := valeur; racine.gauche := null; racine.droit := null; else if racine.info <= valeur then ajouter_feuille(racine.droit, valeur); else ajouter_feuille(racine.gauche, valeur); end if; end if; end; function recherche(racine : in t_pointeur; valeur : integer) return boolean is b : boolean; begin if racine = null then b :=false; else if racine.info = valeur then b := true; else if racine.info <= valeur then b:= recherche(racine.droit, valeur); else b := recherche(racine.gauche, valeur); end if; end if; end if; return b; end; procedure supprimer_feuille(racine : in out t_pointeur; valeur : in integer) is b : boolean; begin if racine /= null then if racine.info = valeur then if racine.droit = null and racine.gauche=null then racine := null; put("valeur supprimée !"); new_line; b := true; else put("la valeur rentrée ne correspond pas à une feuille."); new_line; end if; else if racine.info <= valeur then supprimer_feuille(racine.droit, valeur); if b = true then racine.droit := null; end if; else supprimer_feuille(racine.gauche, valeur); if b=true then racine.gauche := null; end if; end if; end if; end if; end; procedure prefixe(racine : in t_pointeur) is begin if racine /= null then put(racine.info); prefixe(racine.gauche); prefixe(racine.droit); end if; end; procedure infixe(racine : in t_pointeur) is begin if racine /= null then infixe(racine.gauche); put(racine.info); infixe(racine.droit); end if; end; procedure postfixe(racine : in t_pointeur) is begin if racine /= null then postfixe(racine.gauche); postfixe(racine.droit); put(racine.info); end if;