Ctrl K

Минимум охранников на дереве

Сложная
Серверы компании соединены в сеть, устроенную как двоичное дерево с корнем root. На любой сервер можно поставить охранную программу. Программа на сервере следит за ним самим, за его родителем и за его непосредственными детьми. Верните наименьшее число охранных программ, при котором под наблюдением окажутся все серверы дерева. Значения в вершинах не важны — все они равны 0.
Пример 1
root=tree_node([0, 0, 0, 0, None, None, 0]) → 2

Охранник в каждом из двух детей корня: левый видит корень и свою левую вершину, правый — свою правую. Одним охранником все пять вершин не покрыть.

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

Цепочка из четырёх вершин: охранник во второй вершине видит первые три, четвёртой нужен ещё один.

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

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