Witam,
Potrzebuje pomocy przy napisaniu programu w Pascalu który ma tworzyć dokładnie wyważone drzewo binarne.
Do tej pory udało mi się napisać coś takiego:
type
TDana = integer;
Drzewo = ^TDrzewo;
TDrzewo = record
etykieta: TDana;
lewy, prawy: Drzewo;
end;
var
TAB,TABm:array[1..20] of integer;
i, a, n, mediana,medianaPrawa: integer;
dana: TDana;
drzewko: Drzewo;
procedure Wstaw(var W: Drzewo; x:TDana);
begin
if W = nil then
begin
new(W);
W^.lewy:=nil;
W^.prawy:=nil;
W^.etykieta:=x;
end
else
if (W^.etykieta > x) then
Wstaw(W^.lewy,x)
else
if (W^.etykieta < x) then
Wstaw(W^.prawy,x);
end;
procedure drukuj(W : Drzewo);
begin
if W <> nil then
begin
drukuj(W^.Lewy);
Write(W^.Etykieta);
write(' ');
drukuj(W^.Prawy);
end;
end;
procedure tworz(var m:integer);
var me:integer;
Begin
me:m;
mediana:=(m+1) div 2;
Wstaw(drzewko, TAB[mediana]);
medianaPrawa:=((m-mediana+1) div 2 + mediana);
Wstaw(drzewko, TAB[medianaPrawa]);
if (mediana<>1) then tworz(mediana);
if (medianaPrawa<>1) then tworz(medianaPrawa);
End;
BEGIN
Write('Ile liczb chcesz wprowadzic? ');
Readln(a);
Writeln('Wprowadz ', a, ' liczb.');
for i:= 1 to a do
begin
Read(n);
TAB[i]:=n;
end;
tworz(a);
Write('Zawartosc drzewa:');
drukuj(drzewko);
readln(n);
END.
Ale to nie działa zbyt dobrze. Proszę o pomoc.
Chodzi mi o to jak najłatwiej obliczać medianę z tego ciągu.