Ctrl K

Перестроить дерево поиска

Средняя
Дан корень root двоичного дерева поиска: в каждой вершине все значения левого поддерева меньше её значения, а правого — больше. Дерево могло вырасти кривым, например вытянуться в длинную цепочку. Постройте из тех же значений новое дерево поиска минимальной высоты по такому правилу: 1. Выпишите все значения по возрастанию. 2. Корнем становится средний элемент этого списка. Если элементов чётное число и средних два, берётся левый из них. 3. Элементы левее выбранного тем же способом образуют левое поддерево, элементы правее — правое. Верните корень нового дерева.
Пример 1
root=tree_node([10, None, 20, None, 30, None, 40, None, 50]) → [30, 10, 40, None, 20, None, 50]

Значения по возрастанию: 10, 20, 30, 40, 50. Корень — средний элемент 30, слева из 10 и 20 корнем становится левый средний 10, справа из 40 и 50 — 40.

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

Значения по возрастанию: 1, 3, 5, 7. Средних два — 3 и 5, корнем становится левый из них, 3.

Пример 3
root=tree_node([4]) → [4]
Ограничения
  • 1 ≤ число вершин ≤ 10⁴
  • 1 ≤ Node.val ≤ 10⁵
  • Все значения различны, root — корректное дерево поиска
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЭто дерево поиска? СредняяДве перепутанные вершины СредняяДерево из упорядоченной цепочки СредняяK-е по величине в дереве поиска СредняяСамое большое поддерево поиска Средняя
загружаем Python…
Вход
root=tree_node([10, None, 20, None, 30, None, 40, None, 50])
Ожидается
[30, 10, 40, None, 20, None, 50]

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