You are on page 1of 3

Procedure Rotacion_DD(var n:t_apunta; var n1:t_apunta);

begin
n^.sad:=n1^.sai;
n1^.sai:=n;
if n1^.fe=1 then
begin
n^.fe:=0;
n1^.fe:=0;
end
else
begin
n^.fe:=1;
n1^.fe:=-1;
end;
n:=n1;
end;
Procedure Rotacion_DI(var n:t_apunta; var n1:t_apunta);
var n2:t_apunta;
begin
n2:=n1^.sai;
n^.sad:=n2^.sai;
n2^.sai:=n;
n1^.sai:=n2^.sad;
n2^.sad:=n1;
if n2^.fe=1 then
n^.fe:=-1
else
n^.fe:=0;
if n2^.fe=-1 then
n1^.fe:=1
else
n1^.fe:=0;
n2^.fe:=0;
n:=n2;
end;
Procedure Rotacion_II(var n:t_apunta; n1:t_apunta);
begin
n^.sai:=n1^.sad;
n1^.sad:=n;
if n1^.fe=-1 then
begin
n^.fe:=0;
n1^.fe:=0;
end
else
begin
n^.fe:=-1;
n1^.fe:=1;
end;
n:=n1;
end;

Procedure Rotacion_ID(var n:t_apunta; n1:t_apunta);


var n2:t_apunta;
begin
n2:=n1^.sad;
n^.sai:=n2^.sad;
n2^.sad:=n;
n1^.sad:=n2^.sai;
n2^.sai:=n1;
if n2^.fe=1 then
n1^.fe:=-1
else
n1^.fe:=0;
if n2^.fe=-1 then
n^.fe:=1
else
n^.fe:=0;
n2^.fe:=0;
n:=n2;
end;
Procedure Insertar(var Raiz:T_Apunta; Reg_A:Reg_Arbol);
var n,n1:t_apunta;
BEGIN
if raiz=nil then
begin
new(raiz);
raiz^.dato:=Reg_A;
raiz^.fe:=0;
raiz^.sai:=nil;
raiz^.sad:=nil;
end
else
begin
if raiz^.dato.info>Reg_A.info then
begin
Insertar(raiz^.sai, Reg_A);
case raiz^.fe of
1: begin raiz^.fe:=0; end;
0: raiz^.fe:=-1;
-1: begin
n1:=raiz^.sai;
if n1^.fe=-1 then
rotacion_ii(raiz,raiz^.sai)
else
rotacion_id(raiz,raiz^.sai);
end;
end;
end
else

begin
Insertar(raiz^.sad, Reg_A);
case raiz^.fe of
-1: begin
raiz^.fe:=0;
end;
0: raiz^.fe:=1;
1: begin
n1:=raiz^.sad;
if n1^.fe=1 then
rotacion_dd(raiz,raiz^.sad)
else
rotacion_di(raiz,raiz^.sad);
end;
end;
end;
end;
END.

You might also like