TD5

Ce TD traite des arbres binaires. Ceux ci seront représentés ici avec des pointeurs.

td5.adb

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;