Разработать модуль для работы с бинарным деревом. Модуль должен обеспечивать следующие возможности работы с деревом:
На основе базовых операций с деревом необходимо разработать следующие подпрограммы:
Разработать программу, к которой будет подключаться разработанный модуль. Программа должна сделать следующее:
После каждого изменения выводить содержимое дерева.
Имена файлов передаются через параметры программы.
Создать бинарное дерево из целых чисел в диапазоне -20 до +60. Найти в дереве количество элементов, кратных 5.
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | info | Информация для вставки в корневую вершину | TInfo | простая переменная |
Выходные данные | root | Указатель на корневую вершину дерева | указатель | простая переменная |
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | node | Указатель на вершину, к которой надо добавить подвершину | указатель | простая переменная |
info | Информация для вставки в подвершину | TInfo | простая переменная | |
Выходные данные | f | Результат добавления (нельзя добавить, если подвершина уже есть) | boolean | простая переменная |
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | info | Информация для поиска | TInfo | простая переменная |
Выходные данные | node | Указатель на найденную вершину (nil, если вершина не найдена) | указатель | простая переменная |
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | name | Имя файла | строка | простая переменная |
Выходные данные | root | Указатель на корневую вершину дерева | указатель | простая переменная |
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | root | Указатель на корневую вершину дерева | указатель | простая переменная |
Класс | Имя | Смысл | Тип | Структура |
---|---|---|---|---|
Входные данные | root | Указатель на корневую вершину дерева | указатель | простая переменная |
Выходные данные | k | Количество вершин дерева, удовлетворяющих условию | цел. | простая переменная |
Дерево – структура нелинейная. Поэтому в файле надо отмечать, где кончается каждая ветвь дерева. Для этого будем использовать символ *, т.е. если у вершины нет левой и/или правой подвершины, ставим одну или две звёздочки (реализуем обход дерева в прямом порядке, сначала обрабатываем левое поддерево, затем правое). Поскольку звёздочка не является числом, нельзя просто вводить числовые данные – надо вводить строку, и, если она не равна '*', преобразовывать её в целое или вещественное число с помощью функций StrToInt и StrToFloat. Отдельные значения лучше записывать на разных строках. С символами проще, их можно все записать на одной строке вперемешку с символом *. Если в каких-то вариантах символ * попадает в диапазон допустимых значений, исключаем его из рассмотрения и как данные не используем.
Дерево | Содержимое файла |
---|---|
![]() |
1 2 3 4 * * 5 * * * 6 * 7 * * |
№ теста | Входные данные | Ожидаемые результаты | Смысл теста |
---|---|---|---|
1 |
3 1 4 0 5 2 6 |
k = 2 | Есть элементы, удовлетворяющие условию. |
2 |
3 1 4 -1 2 |
k = 0 | Нет элементов, удовлетворяющих условию. |
Для обработки дерева требуется рекурсия. Если вершина не имеет поддеревьев, то результат зависит от данных этой вершины. В противном случае результат равен сумме количества элементов, удовлетворяющих условию, в левом и правом поддеревьях плюс 1, если данные вершины удовлетворяют условию.