Ctrl K

Оставить только диапазон в дереве поиска

Средняя
Дан корень root двоичного дерева поиска и границы lo и hi. Удалите из дерева все вершины, значения которых не попадают в отрезок [lo, hi]. Оставшиеся вершины должны сохранить взаимное расположение: если вершина x была потомком вершины y и обе остались, то x и дальше потомок y. Такое дерево определяется однозначно. Верните его корень — он может отличаться от исходного, а если не осталось ни одной вершины, верните пустое дерево.
Пример 1
root=tree_node([8, 3, 12, 1, 6, 10, 15]), lo=4, hi=11 → [8, 6, 10]

3 и 1 меньше 4: на место 3 поднимается её правый ребёнок 6. 12 и 15 больше 11: на место 12 поднимается 10. Остаётся 8 с детьми 6 и 10.

Пример 2
root=tree_node([5, 2, None, None, 4]), lo=3, hi=9 → [5, 4]

Выпадает только 2, и её правый ребёнок 4 становится левым ребёнком 5.

Пример 3
root=tree_node([7, 2, 9]), lo=10, hi=20 → None

Ни одно значение не попало в диапазон — дерево пустое.

Ограничения
  • Число вершин от 1 до 10⁴
  • 0 ≤ значение вершины ≤ 10⁴, все значения различны
  • root — корректное дерево поиска
  • 0 ≤ lo ≤ hi ≤ 10⁴
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЭто дерево поиска? СредняяДве перепутанные вершины СредняяK-е по величине в дереве поиска СредняяСамое большое поддерево поиска СредняяПрибавить все ключи побольше Средняя
загружаем Python…
Вход
root=tree_node([8, 3, 12, 1, 6, 10, 15]), lo=4, hi=11
Ожидается
[8, 6, 10]

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