Заполнение бинарного дерева со значениями из константы-массива - Free Pascal
Формулировка задачи:
заполнение идет с помощью константы -массива
очередной индекс изменяется в переменной i
c помощью цикла For в теле основной программы
заморочка в следующем
Умища своего не преложу как здесь заполняется это наше
двурукое(ногое ) дерево
предполагаю что так
в вершину идет 20
в левую ветку от 20 число 12
в левую ветку от 12 число 10
в правую ветку от 10 число 15
в правую ветку от 15 число 40
в левую ветку от 40 число 25
в правую ветку от 25 число 55
а как тогда заполнить чтобы получилось такое красивое дерево
........20
...12________40
10__15....25____55
основной корень здесь 20
в левую ветку от 20 идет число 12
в правую ветку от 20 идет 40
от 12 влево число 10 вправо число 15
от 40 влево число 25 вправо число 55
или я чего недогоняю
uses crt;
const n: array[1 .. 7]of integer=(20,12,10,15,40,25,55);//константа - массив
type
PNode = ^Node; {Указатель на узел}
Node = record {Тип запись в котором будет храниться информация}
data: integer;
left, right: PNode; {Ссылки на левого и правого сыновей}
end;
Binary = object
Procedure Init;
Procedure AddToTree (var Tree:PNode; i: byte);
end;{End Binary}
var
Tree,p1:PNode; {Tree адрес корня дерева, p1-вспомогательная переменная}
i: byte;//индекс для n
Procedure Binary.Init;
begin Tree:= nil; end;
{Процедура добавления элемента }
procedure Binary.AddToTree (var Tree:PNode; i: byte); {Входные параметры - адрес корня дерева и добавл элемент }
begin
if Tree=nil then {Если дерево пустое то создаём его корень}
begin
New(Tree); {Выделяем память }
Tree^.data:= n[i]; {Добавляем данные }
Tree^.left:=nil; {Зануляем указатели на левого }
Tree^.right:=nil; {и правого сыновей }
exit;
end;
if x < Tree^.data then {Доб к левому или правому поддереву это завсит от вводимого элемента}
AddToTree(Tree^.left,x) {если меньше корня то в левое поддерево }
else
AddToTree(Tree^.right,x); {если больше то в правое}
end;
var B: Binary;
{********* ОСНОВНАЯ ПРОГА ********************}
begin ClrScr;
B.Init;
For i:= 1 to 7 do
B.AddToTree (Tree, i );
writeln('The end');
Readkey;
понял , при добавлении нового элемента
просмотр чисел в узлах начинается с самого первого
значения - числа 20 ..посмотрел данные в окне
Watches и в call stack видно что возврат идет к самой
вершине..
Решение задачи: «Заполнение бинарного дерева со значениями из константы-массива»
textual
Листинг программы
p2h := {w2h(Seg(p^))+':'+} w2h(Ofs(p^));