Не понимаю, почему отображаются только первый, пред- и последние элементы

Задание

Разработать модуль для работы с бинарным деревом. Модуль должен обеспечивать следующие возможности работы с деревом:

  • добавление корневой вершины дерева;
  • добавление левой подвершины;
  • добавление правой подвершины;
  • поиск вершины, содержащей определённую информацию;
  • удаление вершины и всех её подвершин;
  • ввод элементов бинарного дерева из файла;
  • вывод элементов бинарного дерева на экран;
  • определение количества вершин дерева, удовлетворяющих условию.

Разработать программу, к которой будет подключаться разработанный модуль. Программа должна сделать следующее:

  • ввести дерево из файла;
  • добавить к дереву несколько вершин (сначала ищем нужную вершину, затем добавляем к ней подвершину);
  • удалить из дерева несколько вершин (сначала ищем нужную вершину, затем удаляем её);
  • найти количество элементов дерева, удовлетворяющих условию.

После каждого изменения выводить содержимое дерева.

Имена файлов передаются через параметры программы.


Проблема с созданием дерева.

Не понимаю, почему 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(...) возвращает указатель на память.


Ответы (0 шт):