Ctrl K

Захватить большую часть дерева

Средняя
Двое играют на двоичном дереве root из size вершин; size нечётно, и вершины помечены различными числами от 1 до size. Сначала первый игрок занимает вершину со значением first_pick, затем второй занимает любую другую вершину. Дальше игроки ходят по очереди, начиная с первого. За ход игрок занимает одну свободную вершину, соседнюю с какой-нибудь из уже занятых им (соседи — левый ребёнок, правый ребёнок и родитель). Если таких вершин нет, игрок пропускает ход. Когда ходить не может никто, побеждает тот, кто занял больше вершин. Вы — второй игрок. Верните True, если можно так выбрать первую вершину, чтобы гарантированно победить, иначе False.
Пример 1
root=tree_node([1, 2, 3, 4, 5, 6, 7]), size=7, first_pick=2 → True

Если второй игрок займёт вершину 1, вся часть дерева выше и правее 2 — вершины 1, 3, 6, 7 — достанется ему: 4 вершины против 3.

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

Корень делит дерево на две половины по 3 вершины. Второй игрок может отрезать себе только одну из них, и первый игрок заберёт другую: 3 против 4.

Пример 3
root=tree_node([3, 1, None, 2]), size=3, first_pick=1 → False
Ограничения
  • 1 ≤ size ≤ 100, size нечётно
  • в дереве ровно size вершин
  • значения вершин — различные числа от 1 до size
  • 1 ≤ first_pick ≤ size
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЭто дерево поиска? СредняяДве перепутанные вершины СредняяВсе пути до листьев с заданной суммой СредняяДерево в правую цепочку СредняяСумма чисел на ветвях Средняя
загружаем Python…
Вход
root=tree_node([1, 2, 3, 4, 5, 6, 7]), size=7, first_pick=2
Ожидается
True

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