Практики(Вариант №7) / Практическая работа №5
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Кафедра комплексной информационной безопасности электронновычислительных систем (КИБЭВС)
БИНАРНЫЕ ДЕРЕВЬЯ ПОИСКА Отчет по практической работе №5 по дисциплине «Структуры данных»
Студент гр.
________
__.__.2025
Принял
Преподаватель кафедры КИБЭВС
________ Д.Р. Уразаев __.__.2025
Томск 2025
Задание
Реализовать бинарное дерево поиска при помощи динамических структур (классы). Предусмотреть следующие интерфейсные методы:
•Инициализация пустого дерева.
•Добавление элемента в дерево bool AddItem( int a) - возвращает true, если добавление прошло успешно, иначе false. Например, если такой элемент уже был в дереве - то метод вернет false.
•Удаление элемента из дерева. bool RemoveItem(int a)
•Очистка дерева void Clear()
•Вывод дерева (используйте поиск в ширину) void Print() или string Print() Вариант 7. Реализуйте метод, подсчитывающий высоту дерева.
2
|
Оглавление |
Задание................................................................................................................... |
2 |
Введение................................................................................................................. |
4 |
1 ХОД РАБОТЫ.................................................................................................... |
5 |
Заключение............................................................................................................. |
9 |
Приложение А...................................................................................................... |
10 |
3
Введение
Целью данной работы является реализация бинарного дерева поиска с использованием динамических структур (классов).
4
1 ХОД РАБОТЫ
AddItem: Добавляет элемент в дерево. Если дерево пустое, элемент становится корнем, иначе вызывается рекурсивная вставка (рис. 1)
Рисунок 1 — AddItem
AddRecursive: Рекурсивно находит место для нового элемента, перемещаясь влево или вправо по дереву, в зависимости от значения элемента (рис. 2)
Рисунок 2 — AddRecursive
5
RemoveItem: Удаляет элемент из дерева. Вызывает рекурсивную функцию для поиска и удаления узла с заданным значением (рис. 3)
Рисунок 3 — RemoveItem
RemoveItemRecursive: Рекурсивно ищет элемент для удаления, перестраивая дерево в зависимости от наличия потомков у удаляемого узла (рис. 4)
Рисунок 4 — RemoveItemRecursive
6
Clear: Очищает дерево, удаляя все узлы, сбрасывая корень дерева (рис. 5)
Рисунок 5 — Clear
Print: Выводит элементы дерева в ширину, начиная с корневого узла и проходя по уровням дерева (рис. 6)
Рисунок 6 — Print
7
GetHeightRecursive: Высота дерева вычисляется рекурсивно как максимальная высота левого и правого поддеревьев плюс 1 для текущего узла. Пустое дерево имеет высоту 0. (рис. 7)
Рисунок 7 — GetHeightRecursive
Текстовое описание реализации поиска максимального элемента дерева: Высота дерева — это максимальное количество ребер от корня до самого
дальнего листа. Высота пустого дерева равна 0, высота дерева из одного узла равна 1.
Текстовое описание реализации удаления элемента из дерева:
Функция удаления элемента в бинарном дереве начинается с поиска узла, который нужно удалить. Если узел найден, есть несколько вариантов. Если узел
— это лист (у него нет потомков), его просто удаляют. Если у узла есть один потомок (левый или правый), узел заменяется этим потомком. Если у узла два потомка, находят наименьший элемент в правом поддереве (наименьший элемент больше удаляемого узла), копируют его значение в узел, который нужно удалить, а затем удаляют этот минимальный узел. После выполнения этих действий дерево остаётся упорядоченным (рис. 9,10,11)
8
Рисунок 9 — Удаление листа
Рисунок 10 — Удаление с 1 поддеревом
Рисунок 11 — Удаление с 2 поддеревьями
9
Заключение
В ходе работы было создано бинарное дерево поиска с поддержкой основных операций: добавление, удаление, очистка, вывод, поиск высоты дерева.
10
