Ctrl K

Высота дерева после среза ветки

Сложная
Дан корень root двоичного дерева из n вершин; значения вершин — различные числа от 1 до n. Также дан массив cuts. Каждый элемент cuts[i] — это отдельный вопрос: какой станет высота дерева, если отрезать вершину со значением cuts[i] вместе со всем её поддеревом? Вопросы независимы: после каждого дерево возвращается в исходное состояние. Корень никогда не отрезают. Высота дерева — число рёбер на самом длинном пути от корня вниз до какой-либо вершины. Верните массив ответов в порядке вопросов.
Пример 1
root=tree_node([4, 2, 6, 1, 3, None, 5, None, None, None, 7]), cuts=[3, 6] → [2, 3]

Без поддерева 3 самая длинная ветка — 4 → 6 → 5, высота 2. Без поддерева 6 остаётся 4 → 2 → 3 → 7, высота 3. Каждый срез делается на исходном дереве.

Пример 2
root=tree_node([1, 2, None, 3]), cuts=[3, 2] → [1, 0]

Дерево — цепочка 1 → 2 → 3. Срезав 3, получаем высоту 1; срезав 2, остаётся один корень — высота 0.

Ограничения
  • 2 ≤ n ≤ 10⁵
  • значения вершин различны и лежат в диапазоне от 1 до n
  • 1 ≤ len(cuts) ≤ min(n, 10⁴)
  • 1 ≤ cuts[i] ≤ n
  • cuts[i] не равно значению корня
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСтолбцы дерева с ничьими СложнаяТочка встречи на маршруте СложнаяДеревья-близнецы ЛёгкаяДерево-зеркало ЛёгкаяВысота дерева Лёгкая
загружаем Python…
Вход
root=tree_node([4, 2, 6, 1, 3, None, 5, None, None, None, 7]), cuts=[3, 6]
Ожидается
[2, 3]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 33 теста на сервере, включая скрытые.