968. Binary Tree Cameras
Hard
You are given the root
of a binary tree. We install cameras on the tree nodes where each camera at a node can monitor its parent, itself, and its immediate children.
Return the minimum number of cameras needed to monitor all nodes of the tree.
Example 1:
Input: root = [0,0,null,0,0]
Output: 1
Explanation: One camera is enough to monitor all nodes if placed as shown.
Example 2:
Input: root = [0,0,null,0,null,0,null,null,0]
Output: 2
Explanation: At least two cameras are needed to monitor all nodes of the tree. The above image shows one of the valid configurations of camera placement.
Constraints:
The number of nodes in the tree is in the range
[1, 1000]
.Node.val == 0
# Definition for a binary tree node.
#.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def minCameraCover(self, root: Optional[TreeNode]) -> int:
self.camera = 0
value = self.dfs(root)
return self.camera + (1 if value == 2 else 0)
def dfs(self, root):
# NULL is monitored
if root is None:
return 1
left = self.dfs(root.left)
right = self.dfs(root.right)
# Both are monitored, no monitoring required
if left == 1 and right == 1:
return 2
# One of the child is not monitored
if left == 2 or right == 2:
self.camera += 1
return 3
return 1
Last updated