Деревья: загрузка дерева из файла, добавление вершины, удаление вершины - 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;
Объяснение кода листинга программы
- В первой строке объявлены типы данных: String10 - строка из 10 символов, TStringArray - массив строк, PStringArray - указатель на массив строк.
- Далее идут переменные: NumNodes - количество узлов в дереве, NodeLabel - массив меток узлов.
- В процедуре Preorder происходит обход дерева в порядке возрастания (предварительно, потом дочерние узлы).
- В процедуре Inorder происходит обход дерева в порядке возрастания (сначала левое поддерево, потом узел, потом правое поддерево).
- В процедуре Postorder происходит обход дерева в порядке убывания (сначала правое поддерево, потом левое поддерево, потом узел).
- В процедуре BreadthFirst происходит обход дерева по ширине (сначала все узлы на одном уровне, потом следующий уровень и так далее).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д