Лабораторная работаПрограммированиеГод: 2025ТУСУР: Томский государственный университет систем управления и радиоэлектроники
👁 10💼 0

Готовая лабораторная работа: Бинарное дерево на C++

Загружена: 19.02.2026 11:22

Реализация структуры «бинарное дерево» на C++ с методом поиска вершин, у которых левое и правое поддеревья имеют одинаковую высоту. В отчёте приведён подробный листинг (BinaryTree.h/CPP, main), алгоритм вставки, вычисления высоты и вывода дерева. Полезно для изучения рекурсивных методов, обходов дерева и управления динамической памятью.

Содержание

Бинарные деревья
Отчет по лабораторной работе № 1 по дисциплине
«Структуры и алгоритмы обработки данных на ЭВМ»

Бинарные деревья
Отчет по лабораторной работе № 1 по дисциплине
«Структуры и алгоритмы обработки данных на ЭВМ»

1.  Тема работы
	Тема лабораторной работы № 1 – это разработка и реализация структуры данных «бинарное дерево» на языке программирования C++ с методом поиска вершин, имеющих поддеревья одинаковой высоты.

Подробное описание

📘 О чем эта работа

Отчёт и исходный код посвящены реализации бинарного дерева поиска на языке C++ и задаче нахождения всех узлов, у которых высота левого и правого поддеревьев совпадает (и не равна нулю). Объектом являются узлы дерева (класс Node), предметом — методы вставки, вычисления высоты, обходов и освобождения памяти в классе BinaryTree.

📚 Что внутри

В комплект входят теоретическая часть с целью и алгоритмом, подробный листинг программы и демонстрационные примеры работы. Конкретно в коде реализовано:

  • Класс Node с полями value, left, right и соответствующими геттерами/сеттерами.
  • Класс BinaryTree с методами: insertRecursive (вставка), getHeight (рекурсивный расчёт высоты), findBalancedNodes (поиск вершин с одинаковой высотой поддеревьев), printTree (обход в ширину через std::queue и визуализация), printDescendants (рекурсивный вывод потомков), deleteTreeRecursive (рекурсивное удаление узлов).
  • main.cpp: приём последовательности чисел от пользователя, построение дерева, вывод структуры и список вершины + потомков для найденных сбалансированных узлов.
  • Визуализация: при печати дерева используются временные узлы со значением -1 для корректного отображения отсутствующих детей.
  • Тесты: пример 1 — 8 3 10 1 6 14 4 7 13 (в результате вершины 8 и 6 имеют равные высоты поддеревьев); пример 2 — 1 2 3 4 5 6 7 8 (линейное дерево, сбалансированных узлов нет).

📊 Для кого подходит

Работа полезна студентам курсов по «Структурам данных» и «Алгоритмам», преподавателям для демонстраций, начинающим C++ разработчикам для практики рекурсии, указателей и управления памятью. Подходит для выполнения лабораторной работы в вузе или как шаблон для самостоятельных заданий.

✨ Особенности

Код полностью приводится в приложении: header-файл и cpp-реализация. Обращает на себя внимание практическая реализация вывода дерева через обход в ширину и создание временных узлов для визуализации структуры. Реализовано рекурсивное удаление узлов в деструкторе BinaryTree, что обеспечивает освобождение динамической памяти после завершения программы.

Замечание по эффективности: getHeight вызывается при проверке каждого узла внутри findBalancedNodes, поэтому в худшем случае возможны повторные вычисления высот (возможно O(n^2) для вырожденных деревьев). Это отражено в анализе и может быть улучшено кэшированием высот или однократным прохождением с возвратом высоты.

❓ Частые вопросы

Подойдет ли для моего ВУЗа?
Структура работы (тема, цель, алгоритм, результаты, выводы, листинг) соответствует типовым требованиям лабораторного отчёта в технических вузах.

Можно адаптировать?
Да. Листинг C++ можно расширить: добавить балансировку (AVL/Red-Black), оптимизировать вычисление высот или изменить формат ввода/вывода под требования преподавателя.

Контактные преимущества

Готовый код для компиляции: BinaryTree.h, BinaryTree.cpp и main.cpp. Включены комментарии и понятные имена методов, что облегчает быструю адаптацию и проверку. В отчёте есть разбор примеров и выводы по корректности работы функций.