Не понимаю, почему отображаются только первый, пред- и последние элементы
Задание
Разработать модуль для работы с бинарным деревом. Модуль должен обеспечивать следующие возможности работы с деревом:
- добавление корневой вершины дерева;
- добавление левой подвершины;
- добавление правой подвершины;
- поиск вершины, содержащей определённую информацию;
- удаление вершины и всех её подвершин;
- ввод элементов бинарного дерева из файла;
- вывод элементов бинарного дерева на экран;
- определение количества вершин дерева, удовлетворяющих условию.
Разработать программу, к которой будет подключаться разработанный модуль. Программа должна сделать следующее:
- ввести дерево из файла;
- добавить к дереву несколько вершин (сначала ищем нужную вершину, затем добавляем к ней подвершину);
- удалить из дерева несколько вершин (сначала ищем нужную вершину, затем удаляем её);
- найти количество элементов дерева, удовлетворяющих условию.
После каждого изменения выводить содержимое дерева.
Имена файлов передаются через параметры программы.
Проблема с созданием дерева.
Не понимаю, почему root^.next_left(левый элемент от вершины дерева) и root^.next_right показывают предпоследний и последний элементы, игнорируя все другие элементы до них. Код вот:
Procedure FillTree(const F: TextFile; n: Integer; var root: Node);
begin
if(root = Nil) then
begin
while(not(eof(F))) do
begin
New(root);
Readln(F, root^.data);
Writeln(root^.data);
Writeln();
root^.next_left := Nil;
root^.next_right := Nil;
n := n div 2;
if(n >= 1) then
begin
FillTree(F, n, root^.next_left);
FillTree(F, n, root^.next_right);
end
else
exit;
end;
end;
end;
Procedure DisplayTree(const root: Node);
begin
if(root <> Nil) then
begin
Writeln('root^.data = ', root^.data);
if(root^.next_left <> Nil) then
DisplayTree(root^.next_left);
if(root^.next_right <> Nil) then
DisplayTree(root^.next_right);
end
else
exit;
end;
В данный момент в файле 16 элементов - вещественных чисел в определённом диапазоне. Выводит только первый, предпоследний и последний элементы, то есть root^.next_left указывает на предпоследний элемент, а root^.next_right - на последний. В чём моя ошибка? Ведь root^.next_left и root^.next_right - указатели на следующие от вершины элементы, а New(...) возвращает указатель на память.