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