AlgoMaster Logo

Binary Tree Cameras

tree=[0, 0, null, 0, 0]
1class Solution {
2    private int cameras = 0;
3
4    public int minCameraCover(TreeNode root) {
5        // States: 0=not covered, 1=covered, 2=has camera
6        if (dfs(root) == 0) {
7            cameras++;
8        }
9        return cameras;
10    }
11
12    private int dfs(TreeNode node) {
13        if (node == null) {
14            return 1;  // Null nodes are covered
15        }
16
17        int leftState = dfs(node.left);
18        int rightState = dfs(node.right);
19
20        // If any child is not covered, place camera here
21        if (leftState == 0 || rightState == 0) {
22            cameras++;
23            return 2;  // Has camera
24        }
25
26        // If any child has camera, this node is covered
27        if (leftState == 2 || rightState == 2) {
28            return 1;  // Covered
29        }
30
31        // Both children covered but no camera - not covered
32        return 0;  // Not covered
33    }
34}
0 / 24
L0000Cameras Placed: 0States:Has CameraCoveredNot Covered