function delta(a: Arbre):integer;
begin
delta:=hauteur(a^.filsD)-hauteur(a^.filsG)
end;
procedure Reequilibre(var a: Arbre);
begin
if (delta(a)=2) and (delta(a^.filsD)>=0) then
rotG(a)
else if (delta(a)=2) and (delta(a^.filsD))=-1) then
drotG(a)
else if (delta(a)=-2) and (delta(a^.filsG)<=0) then
rotD(a)
else if (delta(a)=-2) and (delta(a^.filsG)=1) then
drotD(a)
else a^.h:=max(hauteur(a^.filsG),hauteur(a^.filsD))+1
end;
procedure Inserer(x: Element;var a: Arbre);
begin
if a=nil then a:=Nouvelarbre(x,nil,nil)
else if x< a^.contenu then begin
Inserer(x,a^.filsG);
Reequilibre(a)
end
else if x> a^.contenu then begin
Inserer(x,a^.filsD);
Reequilibre(a)
end
end;