LeetCode solutions

1008. Binary Tree Cameras

My accepted Python solution to LeetCode problem 1008, Binary Tree Cameras, running in 0ms.

  • Difficulty: Hard
  • Python
  • Runtime 0ms
  • Memory 17.3MB

Read the problem on LeetCode View on GitHub

Python

Accepted on LeetCode — runtime 0ms, memory 17.3MB, accepted 2026-01-01.

python
# 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.cameras = 0
        
        def dfs(node):
            # Return states:
            # 0: not covered
            # 1: covered but no camera
            # 2: has camera
            
            if not node:
                return 1  # null nodes are covered
            
            left = dfs(node.left)
            right = dfs(node.right)
            
            # If any child is not covered, we must put camera here
            if left == 0 or right == 0:
                self.cameras += 1
                return 2
            
            # If any child has camera, this node is covered
            if left == 2 or right == 2:
                return 1
            
            # Both children are covered but no camera nearby
            return 0
        
        if dfs(root) == 0:
            self.cameras += 1
        
        return self.cameras

Source