Добавил случайную генерацию бинарного дерева (size вводим, а вершины - случайные числа). Вывожу графически, с помощью процедуры PrintTreeGraph.
uses Graph,crt;
type
T = Integer;
TTree = ^TNode;
TNode = record
value: T;
Left, Right: TTree;
end;
procedure PrintTreeGraph(Root: TTree);
function Convert(X: T): string;
var st:string;
begin
str(X,st);
Convert:= st;
end;
var
start_x, start_y: integer;
const
delx = 30;
dely = 20;
circle_r = 10;
btw = circle_r div 2;
procedure print_node(Root: TTree; Level: Integer; L, C, R: Integer);
function min(a, b: Integer): Integer;
begin
min := a;
if b < a then min := b
end;
function Center(a, b: Integer): Integer;
begin
Center := min( a, B ) + abs( a - B ) div 2;
end;
var pos_y: integer;
begin
pos_y := start_y + pred(level) * dely;
if Root^.Right <> nil then begin
Line(C, pos_y, Center(C, R), pos_y + dely);
print_node(root^.right, Level + 1, C+btw, Center(C+btw, R-btw), R-btw);
end;
if Root^.Left <> nil then begin
Line(C, pos_y, Center(L, C), pos_y + dely);
print_node(Root^.Left, Level + 1, L+btw, Center(L+btw, C-btw), C-btw);
end;
SetColor(Black);
SetFillStyle(SolidFill, Black);
PieSlice(C, pos_y, 0, 359, circle_r);
SetColor(White);
Circle(C, pos_y, circle_r);
SetTextJustify(CenterText, CenterText);
OutTextXY(C, pos_y, Convert(Root^.value));
end;
begin
start_x := GetMaxX div 2;
start_y := 10;
print_node(Root, 1, 0, GetMaxX div 2, GetMaxX);
end;
procedure Insert(var Root: TTree; X: T);
procedure CreateNode(var p: TTree; n: T);
begin
New(p);
p^.value := n;
p^.Left := nil;
p^.Right := nil
end;
begin
if Root = nil then CreateNode(Root, X)
else
with Root^ do begin
if value < X then Insert(Right, X)
else
if value > X then Insert(Left, X)
end;
end;
procedure PrintDown(Root: TTree);
begin
if Root = nil then exit;
with Root^ do begin
Writeln(value, '':2);
PrintDown(Left);
PrintDown(Right)
end
end;
procedure PrintLex(Root: TTree);
begin
if Root = nil then exit;
with Root^ do begin
PrintLex(Left);
Writeln(value, '':2);
PrintLex(Right)
end
end;
procedure PrintUp(Root: TTree);
begin
if Root = nil then exit;
with Root^ do begin
PrintUp(Left);
PrintUp(Right);
Writeln(value, '':2);
end
end;
var
grDriver: integer;
grMode: integer;
ErrCode: Integer;
i, size: Integer;
myTree, wasfound: TTree;
iV: array[1 .. 100] of Integer;
begin
Randomize;
grDriver := Detect;
InitGraph(grDriver, grMode,'');
ErrCode := GraphResult;
if ErrCode <> grOk then begin
Writeln('Graphics error:', GraphErrorMsg(ErrCode)); Halt(100);
end;
read(size);
for i:=1 to size do
iV[i]:=random(100);
myTree := nil;
for i := 1 to size do begin
Insert(myTree, iv[i]);
end;
PrintTreeGraph(myTree);
PrintDown(myTree); WriteLn;
writeLn;
PrintLex(myTree); WriteLn;
writeLn;
PrintUp(myTree); WriteLn;
readkey;
end.
Проблема в том, что не выводятся сами обходы: бинарное дерево строится, а затем программа просто ждёт нажатия клавиши. Подскажите пожалуйста, как это исправить? Или сделать вообще, чтоб вообще выводились эти обходы...