Ctrl K

Перевернуть дерево по левому краю

Средняя
Дан корень root двоичного дерева. Его **левый край** — это цепочка из корня, его левого ребёнка, левого ребёнка того и так далее, пока левые дети не кончатся. Гарантируется, что у самой нижней вершины левого края нет правого ребёнка. Переверните дерево вдоль левого края. Для каждой вершины края, у которой есть левый ребёнок L: - L становится родителем этой вершины; - сама вершина становится **правым** ребёнком L; - её бывший правый ребёнок (если был) становится **левым** ребёнком L и переезжает вместе со всем своим поддеревом, внутри которого ничего не меняется. В итоге самая нижняя вершина левого края превращается в новый корень. Верните его. Пустое дерево остаётся пустым.
Пример 1
root=tree_node([5, 8, 3, 6, 9]) → [6, 9, 8, None, None, 3, 5]

Самая левая вершина 6 становится корнем; её брат 9 — левым ребёнком, родитель 8 — правым. Затем у 8 левым ребёнком становится 3, а правым — бывший корень 5.

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

Правых детей нет вообще, поэтому левый путь 4 → 2 → 7 просто разворачивается в правый путь 7 → 2 → 4.

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

Новый корень — 4, у неё нет брата, поэтому левый ребёнок пуст, а правый — 2. У 2 левым ребёнком становится 3 вместе со всем своим поддеревом (5 и 6 остаются при ней), правым — 1.

Ограничения
  • 0 ≤ число вершин ≤ 1000
  • -1000 ≤ Node.val ≤ 1000
  • У самой нижней вершины левого края нет правого ребёнка
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЭто дерево поиска? СредняяДве перепутанные вершины СредняяВсе пути до листьев с заданной суммой СредняяДерево в правую цепочку СредняяСумма чисел на ветвях Средняя
загружаем Python…
Вход
root=tree_node([5, 8, 3, 6, 9])
Ожидается
[6, 9, 8, None, None, 3, 5]

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