Ctrl K

Сбалансированное дерево из отсортированного списка

Лёгкая
Список values отсортирован строго по возрастанию. Постройте из всех его элементов двоичное дерево поиска с минимальной высотой по такому правилу: 1. Корнем становится средний элемент списка. Если длина чётная и средних элементов два, берётся левый из них. 2. Элементы левее выбранного тем же способом образуют левое поддерево, элементы правее — правое. Верните корень построенного дерева.
Пример 1
values=[2, 5, 9, 14, 20] → [9, 2, 14, None, 5, None, 20]

Средний элемент 9 — корень. Слева остаются [2, 5]: из двух средних берём левый, 2, а 5 становится его правым ребёнком. Справа [14, 20]: корень 14, справа 20.

Пример 2
values=[-3, 8] → [-3, None, 8]

Два элемента — корнем становится левый из средних, -3, а 8 — его правый ребёнок.

Пример 3
values=[42] → [42]

Один элемент — дерево из одной вершины.

Ограничения
  • 1 ≤ len(values) ≤ 10⁴
  • −10⁴ ≤ values[i] ≤ 10⁴
  • values строго возрастает
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиДругие порядки для того же дерева поиска СложнаяДерево по прямому и симметричному обходам СредняяДерево по симметричному и обратному обходам СредняяДерево из упорядоченной цепочки СредняяПрямой обход дерева поиска Средняя
загружаем Python…
Вход
values=[2, 5, 9, 14, 20]
Ожидается
[9, 2, 14, None, 5, None, 20]

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