Алгоритмы с нуля
Деревья: тест с выбором ответа
Шесть вопросов, проходящих сквозь весь юнит. Каждый — это решение, которое ты принимаешь, когда берёшь дерево в реальном коде: не определение для пересказа, а какой traversal, какой инвариант, какая сложность реально в игре.
Убедись, что ты связываешь структуру узла, выбор traversal, инвариант BST, баланс, BFS против DFS и паттерн tree DP — синтез, к которому вели отдельные уроки.
Нужно вернуть значения binary search tree в порядке возрастания. Какой один traversal делает это напрямую и почему?
Коллега вставляет ключи 1, 2, 3, 4, 5, 6, 7 в пустой BST именно в этом порядке, а затем жалуется, что поиск медленный. Что произошло и какова высота?
Нужно сгруппировать каждый узел по его глубине — весь уровень 0, затем весь уровень 1 и так далее. Какой подход подходит и какова ключевая деталь реализации?
В стандартном паттерне «рекурсия и комбинирование» для деревьев, что возвращает базовый случай для пустого поддерева при вычислении высоты (при соглашении, что лист имеет высоту 0)?
При вычислении diameter binary tree (длиннейший путь между любыми двумя узлами) почему каждый рекурсивный вызов возвращает высоту поддерева, а diameter держится в боковой переменной?
Два инженера сравнивают рекурсивный in-order traversal и level-order (BFS) обход одного и того же сбалансированного дерева с n узлами. Какова доминирующая дополнительная память каждого?
Сквозная линия юнита — одно соответствие: форма данных диктует инструмент. Binary tree это узел с двумя поддеревьями, поэтому рекурсия — естественный обход; три порядка DFS различаются лишь тем, когда посещается узел, и in-order — тот, что читает BST отсортированным. Инвариант BST покупает поиск O(h) — но только баланс держит h около log n, а вставка в отсортированном порядке это худший случай, обрушивающий её в O(n). BFS со снимком размера на каждом уровне — инструмент, когда важна глубина, меняющий стек на очередь. А tree DP возвращает локальную информацию вверх, накапливая глобальный ответ сбоку — один проход, две величины.