Деревья: загрузка дерева из файла, добавление вершины, удаление вершины - Prolog

Узнай цену своей работы

Формулировка задачи:

Помогите разработать программу, для работы с двоичными деревьями. Реализовать следующие функции: загрузка дерева из файла, добавление вершины, удаление вершины, добавление дуги, все виды обхода дерева, просмотр дерева в традиционном представлении (корень вверху, листьевые вершины внизу). Есть код, но на половину рабочий, не могу понять в чем ошибка, мне сказали там ряд ошибок, которые я найти не могу:
При данном раскладе выдает ошибку 705 (Free variables are not allowed here) в местах где написано write (K) (L) и т.п. Если их изменить на маленькие буквы, то появляется другая ошибка 708 (Warning: The variable is not bound in this clause, F10=ok, ESC=abort)... если продолжить - то дерево запускается но не работает корректно... и файл Tree.txt не знаю чем заполнить, сама прога этого не делает... Особо не судите, нам в универе пролог вообще не преподавали, даже литературу не дали по нему, ищите где хотите мол и делайте курсач тоже как хотите... Вот я и пытаюсь

Решение задачи: «Деревья: загрузка дерева из файла, добавление вершины, удаление вершины»

textual
Листинг программы
type
String10 = String[10];
TStringArray = array [1..1000000] of String10;
PStringArray = ATStringArray;
var
NumNodes : Integer;
NodeLabel : PStringArray; // Массив меток узлов.
procedure Preorder(node : Integer);
begin
VisitNode(NodeLabelA[node]); // Посещение узла.
if (node*2+1<=NumNodes) then
Preorder(node*2+1); // Посещение дочернего узла 1.
if (node*2+2<=NumNodes) then
Preorder(node*2+2); // Посещение дочернего узла 2.
end;
procedure Inorder(node : Integer);
begin
if (node*2+1<=NumNodes) then
Inorder(node*2+1); // Посещение дочернего узла 1.
VisitNodefNodeLabel"[node]); // Посещение узла.
if (node*2+2<=NumNodes) then
Inorder(node*2+2); // Посещение дочернего узла 2.
end;
procedure Postorder(node : Integer);
begin
if (node*2+l<=NumNodes) then
Postorder(node*2 + l) ; // Посещение дочернего узла 1.
if (node*2+2<=NumNodes) then
Postorder(node*2+2); // Посещение дочернего узла 2.
VisitNode(NodeLabel^[node]); // Посещение узла.
end;
procedure BreadthFirst(node : Integer);
var
I : Integer;
begin
for i := 0 to NumNodes do
VisitNode(NodeLabel^[i]);
end;

Объяснение кода листинга программы

  1. В первой строке объявлены типы данных: String10 - строка из 10 символов, TStringArray - массив строк, PStringArray - указатель на массив строк.
  2. Далее идут переменные: NumNodes - количество узлов в дереве, NodeLabel - массив меток узлов.
  3. В процедуре Preorder происходит обход дерева в порядке возрастания (предварительно, потом дочерние узлы).
  4. В процедуре Inorder происходит обход дерева в порядке возрастания (сначала левое поддерево, потом узел, потом правое поддерево).
  5. В процедуре Postorder происходит обход дерева в порядке убывания (сначала правое поддерево, потом левое поддерево, потом узел).
  6. В процедуре BreadthFirst происходит обход дерева по ширине (сначала все узлы на одном уровне, потом следующий уровень и так далее).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы