"Информатика (базовый и углублённый уровень)", Гейн А.Г., Сенокосов А.И.
Дерево — особый вид графа, который помогает описывать связи без замкнутых циклов: от структуры папок и родственных связей до способов хранения данных. Чтобы читать дерево, выбирают корень и рассматривают вершины по уровням: у каждой, кроме корня, есть один родитель, а вершины без детей становятся листьями. Главное свойство дерева — между любыми двумя его вершинами существует ровно один путь; если вершин n, рёбер всегда n − 1.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Дерево — связный граф без циклов. Связность означает, что из любой вершины можно попасть в любую другую по рёбрам; цикл — это замкнутый путь, который возвращается в начальную вершину. Обе части определения нужны одновременно: они отличают дерево от несвязных графов и графов с замкнутыми маршрутами.
Корень дерева — выделенная вершина, относительно которой устанавливают отношения между вершинами. После выбора корня можно говорить, какая вершина расположена выше, какая ниже и как они связаны. Корень задаёт направление описания дерева, хотя рёбра исходного графа сами по себе направленными не становятся.
Лист — вершина корневого дерева, у которой нет потомков. Для проверки смотрят не на все соседние вершины, а только на детей: у листа может оставаться родитель. Это понятие помогает находить конечные элементы иерархии, например папки или узлы, от которых дальше ничего не ветвится.
Потомок вершины — вершина, расположенная ниже неё: это может быть её ребёнок или вершина, до которой нужно пройти через несколько уровней. Ребёнок — непосредственный потомок, а остальные потомки связаны с вершиной через промежуточные вершины. Такое различение позволяет точно описывать структуру дерева.
Связность и отсутствие циклов вместе обеспечивают единственность пути между любыми двумя вершинами. Связность исключает ситуацию, когда вершины разделены на несоединённые части, поэтому путь найти можно. Если бы нашлись два разных пути между одной и той же парой вершин, они разошлись бы и затем снова встретились, образовав цикл. Значит, в дереве может быть только один путь.
Выбор корня позволяет рассматривать соседей каждой вершины как расположенных выше или ниже. Для любой вершины, кроме корня, путь от корня единственный, поэтому последняя вершина перед ней однозначно становится её родителем. Остальные соседние вершины на пути от корня дальше — это дети. У корня родителя нет, а у каждой другой вершины он ровно один.
Вершины распределяются по уровням в зависимости от расстояния до корня. Уровень корня обычно принимают равным нулю, а при переходе по одному ребру вниз уровень увеличивается на единицу. Поэтому уровень вершины равен числу рёбер на единственном пути от корня к ней. Высота дерева — максимальный уровень: она показывает, насколько далеко от корня находится самая удалённая вершина.
В дереве с n вершинами ровно n − 1 ребро. Это можно представить так: сначала есть одна вершина, а затем каждую из оставшихся n − 1 вершин присоединяют одним ребром к уже связной части. Дополнительное ребро между уже связанными вершинами создаст второй путь и цикл. Если же рёбер недостаточно, некоторые вершины не будут соединены с остальными, то есть граф окажется несвязным.
В двоичном дереве у каждой вершины не более двух детей; их называют левым и правым. Эти названия задают различие между позициями, даже если у вершины только один ребёнок. У него может быть только левый или только правый ребёнок, а может не быть детей вовсе. Следовательно, «двоичное» означает ограничение сверху на число детей, а не обязательное наличие двух.
| Понятие или свойство | Что означает | Как определить или проверить |
|---|---|---|
| Дерево | Связный граф без циклов | Проверить связность и отсутствие циклов |
| Корень | Выделенная вершина, задающая отношения выше и ниже | Найти вершину, от которой отсчитывают уровни |
| Родитель и ребёнок | Родитель расположен на один шаг ближе к корню, ребёнок — на один шаг дальше | Проследить путь от корня |
| Лист | Вершина без детей | Проверить, есть ли у вершины потомки ниже неё |
| Уровень вершины | Расстояние от корня в рёбрах | Посчитать рёбра на пути от корня |
| Высота дерева | Максимальный уровень его вершин | Найти самый большой уровень |
| Число рёбер | Для n вершин равно n − 1 | Вычесть единицу из числа вершин |
Пользуйся таблицей как последовательностью проверок: сначала выясни, действительно ли перед тобой дерево, а затем определи корень и отношения между вершинами. Для задач на уровни отсчитывай рёбра от корня, а высоту находи по самому большому уровню. Формула числа рёбер даёт быстрый способ проверить ответ, но сама по себе не доказывает, что граф связен и не содержит циклов.
Условие. Дан граф с несколькими вершинами и рёбрами. Нужно определить, является ли он деревом. Одной проверки числа рёбер недостаточно: требуется проверить оба условия определения. Ответ обоснуем связностью и наличием или отсутствием циклов.
Ответ. Граф является деревом тогда и только тогда, когда он связен и не содержит циклов. Если найдено нарушение хотя бы одного условия, ответ — нет. Проверка только одного условия не даёт достаточного основания.
Условие. В корневом дереве даны вершины и рёбра, требуется найти родителей, детей, листья и уровни. В примере корень A соединён с B и C, B соединена с D и E, а C — с F. Считаем уровень корня равным нулю.
Ответ. Уровни: A — 0, B и C — 1, D, E и F — 2. Листья — D, E и F, а высота дерева равна 2. Родителя каждой вершины, кроме A, можно определить как предыдущую вершину на пути от корня.
Условие. Дерево имеет 12 вершин. Нужно определить число рёбер и выяснить, можно ли добавить одно ребро, сохранив свойство дерева. Рассматриваем добавление ребра между уже существующими вершинами. Для ответа используем свойство дерева и объясним, что изменится.
Ответ. В дереве с 12 вершинами 11 рёбер. Добавить ещё одно ребро между его вершинами, не нарушив свойство дерева, нельзя: оно создаст цикл. Добавление новой вершины с одним ребром — другая операция, и она сохраняет дерево.
Ошибка: считать деревом любой граф без циклов. Такой граф может состоять из нескольких несвязанных частей, между которыми нет пути. Путаница возникает потому, что отсутствие циклов — заметное, но только одно из условий определения. Проверь себя: из одной выбранной вершины должны быть достижимы все остальные.
Ошибка: считать деревом любой связный граф. Связность гарантирует пути между вершинами, но не запрещает замкнутые маршруты. Например, связный граф может содержать цикл. Чтобы проверить себя, после проверки связности отдельно поищи цикл.
Ошибка: путать лист с вершиной без соседей. В корневом дереве лист не имеет детей, но может быть соединён с родителем. Ошибка появляется, если переносить на корневое дерево бытовое значение слова «конечная вершина» и смотреть на все рёбра сразу. Проверяй положение соседа относительно корня: лист — это вершина без продолжения вниз.
Ошибка: полагать, что у каждой вершины двоичного дерева ровно два ребёнка. Термин означает, что детей не больше двух, а не то, что их обязательно два. Это путают из-за слова «двоичное». Для самопроверки перечисли допустимые варианты: у вершины может быть ноль, один или два ребёнка.
Для изучения деревьев нужны понятия графа, вершины, ребра, пути, связности и цикла: именно через них формулируются условия, которым должно удовлетворять дерево. Деревья применяют, когда данные удобно расположить иерархически: так устроены структуры папок и многие способы хранения информации. Они используются в поиске, обработке данных и построении алгоритмов, где важно быстро переходить от общего узла к более конкретным элементам.
Может ли дерево состоять из одной вершины?
Да. Граф из одной вершины связен и не содержит циклов, поэтому он является деревом. Рёбер в нём нет, что соответствует формуле n − 1.
Почему между двумя вершинами дерева существует только один путь?
Связность гарантирует, что путь между вершинами есть. Если бы существовали два разных пути, они образовали бы цикл, а в дереве циклов нет.
Обязательно ли у корневого дерева должен быть только один лист?
Нет. Листьев может быть несколько, например если у корня есть несколько детей без потомков. В дереве из одной вершины эта единственная вершина тоже считается листом.
Чем уровень вершины отличается от высоты дерева?
Уровень — расстояние от корня до конкретной вершины, измеренное числом рёбер. Высота дерева — наибольший уровень среди всех его вершин.
Почему в дереве с n вершинами ровно n − 1 ребро?
Чтобы связать n вершин без циклов, достаточно присоединить каждую новую вершину одним ребром к уже построенной части. Так добавляются n − 1 ребро; лишнее ребро замкнуло бы цикл.
§ 55. Деревья