Здравствуйте! Помогите, пожалуйста, с задачей.
Создать сбалансированное бинарное дерево. Разработать процедуру сортировки пузырьком элементов дерева.
Создание и вывод дерева:
Код:
type
u=^uzl;
uzl=record
i:integer;
l,r:u;
end;
var h:u; n:integer;
procedure ShowTree(h:u; x,y,w,f:integer);
const a=5;
var s:string;
begin
if h<>nil then begin
ShowTree(h^.l, x-w div 4, y+4*a, w div 2, 1);
with form1.Canvas do begin
brush.Color:=clblack;
if f<>0 then
begin
moveto(x,y);
lineto(x+f*(w div 2), y-4*a);
end;
ellipse(x-a,y+a,x+a,y-a);
str(h^.i,s);
brush.style:=bsClear;
font.Name:='tahoma';
font.Size:=10;
textout(x,y,s);
end;
showtree(h^.r, x+w div 4, y+4*a, w div 2, -1);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
function tree(k:integer):u;
var t:u;
begin
if (k=0) then begin
tree:=nil; exit; end;
new(t);
t^.i:=random(100);
t^.l:=tree(k div 2);
t^.r:=tree(k-(k div 2)-1);
tree:=t;
end;
begin
n:=StrToInt(LabeledEdit1.Text);
h:=tree(n);
ShowTree(h,320,50,460,0);
end;
Вопрос в сортировке... В этом случае нельзя ведь как-нибудь приспособить алгоритм сортировки "пузырьком" односвязного списка?