Практика 5(СД)
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронно-
вычислительных систем (КИБЭВС)
БИНАРНЫЕ ДЕРЕВЬЯ ПОИСКА Отчёт по практической работе №5
по дисциплине «Структуры данных»
Студент гр. 714-1
_______ И.С. Максимов
__.__.2025
Доцент кафедры КИБЭВС
_______ Е.Е. Лунёва
__.__.2025
Томск 2025
|
Оглавление |
Введение................................................................................................................... |
3 |
1. Ход работы .................................................................................................... |
4 |
Заключение .............................................................................................................. |
9 |
Приложение А ....................................................................................................... |
10 |
2
Введение
Целью данной работы является реализация бинарного дерева поиска с
использованием динамических структур.
По отчету: недочет, нет вводного абзаца, с описание структуры классов. Рисунки нумерация не по ОС ТУСУР (сквозная, а нужно с привязкой к номеру раздела)
3
1. Ход работы
AddItem: добавляет элемент в дерево. Если дерево пустое, элемент становится корнем, иначе вызывается рекурсивная вставка (рис. 1)
Рисунок 1 — Метод AddItem
AddRecursive: рекурсивно находит место для нового элемента,
перемещаясь влево или вправо по дереву, в зависимости от значения элемента
(рис. 2)
Рисунок 2 — Метод AddRecursive
4
RemoveItem: удаляет элемент из дерева. Вызывает рекурсивную функцию для поиска и удаления узла с заданным значением (рис. 3)
Рисунок 3 — Метод RemoveItem
RemoveRecursive: рекурсивно ищет элемент для удаления, перестраивая дерево в зависимости от наличия потомков у удаляемого узла (рис. 4)
Рисунок 4 — Метод RemoveRecursive
Clear: очищает дерево, удаляя все узлы, сбрасывая корень дерева (рис. 5)
Рисунок 5 — Метод Clear 5
Print: выводит элементы дерева в ширину, начиная с корневого узла и проходя по уровням дерева (рис. 6)
Рисунок 6 — Метод Print
FindMax: находит и возвращает максимальный элемент дерева, проходя по правым потомкам до конца (рис. 7)
Рисунок 7 — Метод FindMax
6
FindMinNode: находит и возвращает минимальный элемент дерева. Для этого проходит по левым потомкам, начиная от корня, до самого крайнего левого кеузла, который и является минимальным элементом (рис. 8)
Рисунок 8 – Метод FindMinNode
Текстовое описание реализации удаления элемента из дерева: функция удаления элемента в бинарном дереве начинается с поиска узла, который нужно удалить. Если узел найден, есть несколько вариантов. Если узел — это лист (у него нет потомков), его просто удаляют. Если у узла есть один потомок (левый или правый), узел заменяется этим потомком. Если у узла два потомка, находят наименьший элемент в правом поддереве (наименьший элемент больше удаляемого узла), копируют его значение в узел, который нужно удалить, а затем удаляют этот минимальный узел. После выполнения этих действий дерево остаётся упорядоченным (рис. 9,10,11)
Рисунок 9 – Удаление листа
7
Рисунок 10 – Удаление при одном поддереве
Рисунок 11 – Удаление при двух поддеревьях
8
Заключение
В ходе работы было создано бинарное дерево поиска с поддержкой основных операций: добавление, удаление, очистка, вывод, поиск максимального элементов.
9
Приложение А
Листинг кода: using System;
// Класс узла бинарного дерева class TreeNode
{
public int Data; |
// Значение узла |
|
public TreeNode Left; |
|
// Левый потомок |
public TreeNode Right; |
// Правый потомок |
|
// Конструктор инициализирует узел с заданным значением, дети пусты public TreeNode(int data)
{
Data = data;
Left = null;
Right = null;
}
}
// Класс узла для собственной очереди обхода дерева class QueueNode
{
10
