procedure wstaw_drzewo (klucz: integer; var nood:wskd; var przodek:wskd; var h: boolean);
var
p1, p2: wskd;
begin
if nood=nil then // wstawianie pod adres pusty
begin
new(nood);
h:=true;
nood^.root:=przodek;
nood^.klucz:=klucz;
nood^.lsyn:=nil;
nood^.psyn:=nil;
nood^.wywazenie:=0;
end else
if klucz<nood^.klucz then
begin
wstaw_drzewo(klucz, nood^.lsyn, nood, h);
if h then
case nood^.wywazenie of
1: begin
nood^.wywazenie:=0;
h:=false;
end;
0: nood^.wywazenie:=-1;
-1: begin
t[j].w:=1;
p1:=nood^.lsyn;
if p1^.wywazenie=-1 then
begin
nood^.lsyn:=p1^.psyn;
p1^.psyn:=nood;
nood^.wywazenie:=0;
nood:=p1;
end else
begin
p2:=p1^.psyn;
p1^.psyn:=p2^.lsyn;
p2^.lsyn:=p1;
nood^.lsyn:=p2^.psyn;
p2^.psyn:=nood;
if p2^.wywazenie=-1 then nood^.wywazenie:=1 else nood^.wywazenie:=0;
if p2^.wywazenie=1 then p1^.wywazenie:=-1 else p1^.wywazenie:=0;
nood:=p2;
end;
nood^.wywazenie:=0;
h:=false;
end
end else
if klucz>nood^.klucz then
begin
wstaw_drzewo(klucz,nood^.psyn, nood, h);
if h then
case nood^.wywazenie of
-1:begin
nood^.wywazenie:=0;
h:=false;
end;
0: nood^.wywazenie:=1;
1: begin
t[j].w:=1;
p1:=nood^.psyn;
if p1^.wywazenie=1 then
begin
nood^.psyn:=p1^.lsyn;
p1^.lsyn:=nood;
nood^.wywazenie:=0;
nood:=p1;
end else
begin
p2:=p1^.lsyn;
p1^.lsyn:=p2^.psyn;
p2^.psyn:=p1;
nood^.psyn:=p2^.lsyn;
p2^.lsyn:=nood;
if p2^.wywazenie=1 then nood^.wywazenie:=-1 else nood^.wywazenie:=0;
if p2^.wywazenie=-1 then p1^.wywazenie:=1 else p1^.wywazenie:=0;
nood:=p2;
end;
nood^.wywazenie:=0;
h:=false;
end;
end
end
else
h:=false;
end;
end;