Заполнение бинарного дерева со значениями из константы-массива - 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^));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д