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