
СД Практика 5
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронновычислительных систем (КИБЭВС)
БИНАРНЫЕ ДЕРЕВЬЯ ПОИСКА Отчет по практической работе №5 по дисциплине «Структуры данных»
Студент гр. 7х3-х
_______ ххххххх
_______
Принял: Преподаватель КИБЭВС
_______ Уразаев Д.Р.
_______
Томск 2024
Задание
Реализовать бинарное дерево поиска при помощи динамических структур (классы). Предусмотреть следующие интерфейсные методы:
•Инициализация пустого дерева.
•Добавление элемента в дерево bool AddItem(int a) – возвращает true, если добавление прошло успешно, иначе false. Например, если такой элемент уже был в дереве, то метод вернет false.
•Удаление элемента из дерева bool RemoveItem(int a)
•Очистка дерева void Clear()
•Вывод дерева (используйте поиск в ширину) void Print() или string Print()
Вариант 2. Реализуйте метод, находящий самый маленький элемент в дереве.
2
|
|
Содержание |
1 Введение.............................................................................................................. |
4 |
|
2 ХОД РАБОТЫ.................................................................................................... |
5 |
|
2.1 |
Классы........................................................................................................ |
5 |
2.2 |
Метод AddItem()........................................................................................ |
6 |
2.3 |
Метод RemoveItem().................................................................................. |
7 |
2.4 |
Метод Clear().............................................................................................. |
9 |
2.5 |
Метод PrintTree()..................................................................................... |
10 |
2.6 |
Метод Minimum().................................................................................... |
11 |
Заключение........................................................................................................... |
13 |
|
Приложение А...................................................................................................... |
14 |
3
1 Введение
Целью работы является реализация бинарного дерева при помощи динамических структур на языке программирования C#.
4

2 ХОД РАБОТЫ
2.1Классы
Вприложении А представлен листинг реализованной программы.
Был реализован класс Node, который отвечает за инициализацию и переопределение элементов и класс Tree, который отвечает за работу с бинарным деревом поиска. Классы представлены на рисунке 2.1.
Рисунок 2.1 – Классы
5

2.2 Метод AddItem()
Метод AddItem() добавляет новые элементы в дерево. Метод создает новый корень дерева, если дерево пустое. Если же в дереве уже есть элементы,
то метод вызывает вспомогательный метод AddItemRecursive().
Рекурсивный метод AddItemRecursive() проверяет есть ли в дереве добавляемый элемент. Если элемент уже добавлен, то метод возвращает false,
иначе метод добавляет элемент в правое или левое поддерево, проверяя меньше или больше ли добавляемый элемент, чем элемент дерева, параллельно создавая новый узел в дереве под элемент. Реализация методов в программе представлена на рисунке 2.2.
Рисунок 2.2 – Методы для добавления элементов
6

2.3 Метод RemoveItem()
Метод RemoveItem() удаляет выбранный элемент из дерева. Если дерево пустое, то метод возвращает false, иначе вызывает вспомогательный метод
RecursiveRemoveItem().
Рекурсивный метод RecursiveRemoveItem() проверяет есть элемент в дереве, если нет, то возвращается false. Если же элемент есть в дереве, то метод ищет в каком поддереве находится элемент. Когда элемент найден, метод использует один из трех сценариев для удаления. Если элемент является листом, то метод очищает узел и возвращает true. Если у элемента есть один дочерний элемент, то предшествующий элементу узел связывается с его дочерним узлом, тем самым удаляя его из дерева. Если у элемента два дочерних элемента, то применяется вспомогательный метод FindMin для нахождения наименьшего узла из двух дочерних элементов, т.е. находит элемент, который находится левее (рисунок 2.3). Затем найденный дочерний наименьший элемент связывается с элементом, предшествующим тому, что был удален.
Реализация методов в программе представлена на рисунке 2.4.
Рисунок 2.3 – Метод FindMin()
7

Рисунок 2.4 – Методы для удаления элементов
8

2.4 Метод Clear()
Метод Clear() очищает дерево от всех имеющихся узлов посредством присваивания корню дерева значения null. Реализация метода представлена на рисунке 2.5.
Рисунок 2.5 – Метод Clear()
9

2.5 Метод PrintTree()
Метод PrintTree() выводит дерево с помощью очереди, используя поиск в ширину, чтобы пройти по всем уровням дерева. Выполняется проверка дерева,
если оно пустое, то метод возвращает соответствующее сообщение. Если же в дереве есть элементы, то создается новая очередь, корень дерева становится первым элементом очереди. Затем с помощью цикла while метод обходит все узлы. Из очереди извлекается узел current, данные узла current выводятся в консоль. Происходит проверка, есть ли у узла current левое поддерево, если есть, то левое поддерево добавляется в очередь. Аналогичные действия происходят и для правого поддерева. Реализация метода в программе представлена на рисунке 2.6.
Рисунок 2.6 – Метод PrintTree()
10