Ctrl K

Идеальные поддеревья по размеру

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

Целиком дерево не идеальное: у вершины 1 нет детей, а у 7 они есть. Самые большие идеальные поддеревья — с корнями 7 и 2, по 3 вершины.

Пример 2
root=tree_node([10, 20, 30, 40, 50, 60, 70]), rank=2 → 3

Размеры идеальных поддеревьев по убыванию: 7, 3, 3, 1, 1, 1, 1. Второй — 3.

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

Идеальное поддерево здесь одно — сам лист 6, второго нет.

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

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