Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практика 5 - Бинарное дерево поиска - СФ

.pdf
Скачиваний:
10
Добавлен:
06.11.2022
Размер:
462.49 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕЕНЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронно-

вычислительных систем (КИБЭВС)

Бинарные деревья поиска Отчет по практической работе №5

По дисциплине «Структуры данных»

Студент гр. ххххх

________ ххххх

________

Принял Преподаватель КИБЭВС

________ ххххх

________

Томск 2022

Задание

Реализовать бинарное дерево поиска при помощи динамических структур

(классы). Предусмотреть следующие интерфейсные методы:

Инициализация пустого дерева;

Добавление элемента в дерево bool AddItem( int a) - возвращает true,

если добавление прошло успешно, иначе false. Например, если такой элемент уже был в дереве - то метод вернет false;

Удаление элемента из дерева. bool RemoveItem(int a);

Очистка дерева void Clear();

Вывод дерева (используйте поиск в ширину) void Print() или string

Print().

Вариант 8. Реализуйте метод, находящий самый большой и самый

маленький элемент в дереве.

2

Содержание

1 Введение …………………………………………………………………………... 4

2 Ход работы ………………………………………………………………………... 5

3 Заключение ……………………………………………………………………… 11

Приложение А ………………………………………………………………..…… 12

3

1 Введение

Целью работы является реализация бинарного дерева при помощи

динамических структур. Программа будет разработана на языке

программирования C#.

4

2 Ход работы

Дерево – это граф без петель и циклов. Деревья используются для организации данных в виде иерархической структуры. Первый узел дерева называется корнем. Если этот корневой узел соединен с другим узлом, тогда корень является родительским узлом, а связанный с ним узел – дочерним. Листья

– это последние узлы на дереве.

Листинг программы представлен в Приложении А.

Для добавления элемента в дерево используется метод AddItem. Он сравнивает значение добавляемого элемента с существующим, и если значение элемента больше существующего, выполняется проверка на наличие правого поддерева, и, если оно отсутствует, элемент записывается вправо, иначе происходит вызов функции AddItem для следующего правого элемента.

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

Рисунок 2.1 - Добавление элемента в дерево

5

Для удаления элемента из дерева сначала реализуется метод поиска

Searching (рисунок 2.2). Если элемент больше, то метод возвращает 1, если меньше, то возвращает -1, иначе 0.

Рисунок 2.2 - Поиск элемента

Удаление осуществляет метод RemoveItem. При удалении существует несколько случаев:

1)У узла нет дочерних узлов;

2)У узла есть левый дочерний узел;

3)У узла есть правый дочерний узел;

4)У узла есть оба дочерних узла.

Если у узла нет дочерних узлов, то узел просто удаляется.

Если удаляемый элемент не содержит левого поддерева, на его место становится следующий элемент от правого поддерева (рисунок 2.3).

6

Рисунок 2.3 - Удаление, если нет левого дочернего узла

Если же удаляемый элемент не содержит правого поддерева, на его место становится следующий элемент от левого (рисунок 2.4).

Рисунок 2.4 - Удаление, если нет правого дочернего узла

7

Если же элемент имеет поддеревья с обоих сторон, на его место становится наименьший элемент из правого поддерева (рисунок 2.5).

Рисунок 2.5 - Удаление, при наличии двух дочерних узлов

Вбинарном дереве поиска элементы больше корневого узла расположены

вправом поддереве, а меньше в левом. Из этого следует заключение, что самый большой элемент будет последним справа, а самый малый последним слева.

Метод для реализации варианта MaxMin перебирает значения до тех пор,

пока не найдет самый правый лист бинарного дерева, а также самый левый лист.

На рисунке 2.6 представлен код метода.

8

Рисунок 2.6 - Метод MaxMin

Вывод дерева выполняется с помощью метода Print (рисунок 2.7).

Рисунок 2.7 - метод Print

Метод LevelOrderTravesal создает очередь для вывода дерева способом обхода в ширину. Сначала метод выводит корень дерева, затем выводит дочерние узлы с слевого узла, а затем правый дочерний узел, продожается пока не станут равными нулю. Код представлен на рисунке 2.8.

9

Рисунок 2.8 - Метод LevelOrderTravesal

На рисунке 2.9 представлена работа программы.

Рисунок 2.9 - Работа программы

10