
Лабораторная работа №5 «Деревья».
Вариант 5. Зубов Иван, А-07-11.
Задание
Разработать программу создания и обработки заданной структуры данных. Определить рекурсивные функции обходов дерева (в прямом, обратном и симметричном порядке).
Разработать пользовательский интерфейс.
Предусмотреть выполнение следующих обязательных опций:
1 - создать (ввести с клавиатуры и/или загрузить из файла);
2 - добавить (удалить) элемент;
3 - обход дерева;
4 - индивидуальное задание:
5 |
Дерево двоичное |
Определение числа листьев |
Анализ задания
Для решения данной задачи мы должны в первую очередь описать динамическую структуру данных «двоичное дерево» на основе указателей, написать стандартные операции работы с ним, а затем дополнить их операцией обхода дерева с подсчитыванием числа листьев на нём. Пользовательский интерфейс должен позволять производить с деревом стандартные операции, просматривать его (по крайней мере в самом общем виде) и определять число листьев.
Двои́чное де́рево — древовидная структура данных, в которой каждый узел имеет не более двух потомков (детей). Как правило, первый называется родительским узлом, а дети называются левым и правым наследниками.
Разработка структуры программы
Рисунок 1. Структура программы.
Таблица 1. Спецификация программы.
Имя модуля |
Имя вызывающего модуля |
Назначение |
Входные данные |
Выходные данные |
Особенности |
main |
- |
Функция, инициализирующая программу |
- |
- |
- |
button1_Click
|
main |
Выполнение выбранного пользователем действия |
comboBox1->SelectedIndex, textBox1->Text |
- |
Основная функция программы |
search |
button1_Click |
Поиск элемента |
tree *root, int name |
- |
- |
search_dubl |
button1_Click |
Поиск дубликатов |
tree *root |
- |
- |
obhod1 |
button1_Click
|
Рекурсивный обход 1 (Прямой обход) |
tree *root |
- |
- |
obhod2 |
button1_Click |
Рекурсивный обход 2 (Обратный обход) |
tree *root |
- |
- |
obhod3 |
button1_Click |
Рекурсивный обход 3 (Симметричный обход) |
tree *root |
- |
- |
obhod0 |
button1_Click |
Рекурсивный обход 0 (Прямой обход) для подсчитывания числа листьев |
tree *root |
- |
Основана на функции obhod1 |
delder |
button1_Click |
Удаление дерева |
tree *root |
tree *root |
- |
del |
button1_Click |
Удаление числа (элемента) |
tree *root, int name |
tree *root |
- |
descent |
del |
Спуск по дереву (для функции удаления) |
tree *p |
tree *y |
Вспомогательная функция для функции del |
add |
button1_Click |
Добавление числа |
tree *root, int n |
- |
- |
readfile |
button1_Click |
Считывание дерева из файла |
tree **root |
- |
- |
first |
button1_Click, readfile |
Создание первого элемента бинарного дерева |
int name |
tree *root |
Вспомогательная функция для функций button1_Click и readfile |