Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структуры данных ответы на экз.docx
Скачиваний:
0
Добавлен:
13.12.2025
Размер:
45.55 Кб
Скачать
  1. Бинарные деревья. Организация бинарных деревьев при помощи массива.

Всё дерево записывается в массив по уровням: сначала корень, потом его дети слева направо, потом внуки — опять слева направо, и так далее.

Например: — Корень дерева всегда записывается в нулевую ячейку массива. — Если узел находится в ячейке с номером i, то:   • его левый потомок будет в ячейке с номером 2·i + 1,   • его правый потомок — в ячейке 2·i + 2. — А если вы знаете номер ячейки узла (кроме корня), то его родитель всегда находится в ячейке с номером (i − 1) / 2, где деление целочисленное — то есть дробная часть отбрасывается.

Такая нумерация работает автоматически, как только дерево записано в массив по уровням — слева направо, сверху вниз. Благодаря этому структура дерева полностью определяется только порядком элементов в массиве, и никакие дополнительные ссылки хранить не нужно.

  1. Бинарные деревья поиска. Организация деревьев при помощи динамических структур.

  1. Бинарные деревья поиска. Операции. Удаление элементов из дерева. Случай 1. Узел — лист (нет потомков)

  • Просто удаляем узел.

  • Указатели у его родителя на этот узел устанавливаются в NULL.

Пример: Удаляем узел с ключом 4, у которого нет левого и правого поддерева → просто освобождаем память и обнуляем соответствующий указатель у родителя.

🔹 Случай 2. У узла один потомок (только левое или только правое поддерево)

  • Узел удаляется, а его единственный потомок поднимается на его место.

  • Родитель удаляемого узла теперь ссылается на этого потомка.

Пример: Узел 9 имеет только правое поддерево (12). После удаления 9 его родитель (8) начинает указывать напрямую на 12.

🔹 Случай 3. У узла два потомка

Это наиболее сложный случай. Прямое удаление нарушит структуру BST. Поэтому применяется следующая стратегия:

  1. Находим преемника (successor) — это наименьший узел в правом поддереве (или, альтернативно, предшественник (predecessor) — наибольший в левом поддереве).

  2. Копируем значение преемника в удаляемый узел.

  3. Удаляем преемника, который гарантированно имеет не более одного потомка (так как он — самый левый в поддереве → у него нет левого потомка).

  1. Бинарные деревья. Стратегии обхода деревьев. В ширину.

Обход бинарного дерева в ширину (Breadth-First Search, BFS) — это стратегия, при которой узлы дерева посещаются по уровням: сначала корень (уровень 0), затем все узлы уровня 1 (слева направо), потом — уровня 2 и так далее, пока не будут обработаны все узлы.

Реализуется с помощью очереди.

  1. Бинарные деревья. Стратегии обхода деревьев. В глубину.

Обход бинарного дерева — это процесс посещения всех его узлов по одному разу в определённом порядке.

Один из главных подходов — это обход в глубину (Depth-First Search, DFS). При таком обходе мы сначала идём как можно глубже по одной ветке, доходим до листа, а потом возвращаемся назад, чтобы исследовать другие ветки.

В бинарных деревьях обход в глубину делится на три основных стратегии, в зависимости от того, в какой момент мы обрабатываем (например, выводим) значение текущего узла:

1. Прямой обход (Pre-order)

Порядок: корень → левое поддерево → правое поддерево. Сначала обрабатываем сам узел, затем рекурсивно обходим левого ребёнка, потом — правого.

Пример: такой обход часто используется для создания копии дерева или вывода структуры (например, в виде префиксной записи выражения).

2. Центральный (симметричный) обход (In-order)

Порядок: левое поддерево → корень → правое поддерево. Сначала идём влево, потом обрабатываем узел, потом — вправо.

В бинарном дереве поиска такой обход выводит все элементы в порядке возрастания — это его главное преимущество.

3. Обратный обход (Post-order)

Порядок: левое поддерево → правое поддерево → корень. Сначала полностью обходим левое поддерево, потом правое, и только в самом конце обрабатываем текущий узел.

Такой обход используется, например, при удалении дерева — сначала удаляем детей, потом родителя, чтобы не потерять ссылки.