> For the complete documentation index, see [llms.txt](https://code-snippets.hbamithkumara.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://code-snippets.hbamithkumara.com/leetcode/problems/901-1000/binary-tree-cameras.md).

# 968. Binary Tree Cameras

### Description

Given a binary tree, we install cameras on the nodes of the tree.&#x20;

Each camera at a node can monitor **its parent, itself, and its immediate children**.

Calculate the minimum number of cameras needed to monitor all nodes of the tree.

### Constraints

1. The number of nodes in the given tree will be in the range `[1, 1000]`.
2. **Every** node has value 0.

### Approach

### Links

* GeeksforGeeks
* Leetcode
* ProgramCreek
* YouTube

### **Examples**

{% tabs %}
{% tab title="Example 1" %}
**Input:** \[0, 0, null, 0, 0]

**Output:** 1

**Explanation:** One camera is enough to monitor all nodes if placed as shown.

<div align="left"><img src="https://1091135627-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MEmU-aGQcUvtjjAH8_3%2F-M_p_p_w1hHZ36pAxcvd%2F-M_paPr1yn_S5e8AQ4rK%2Fimage.png?alt=media&amp;token=ca4b57f5-0019-414f-90b5-7f9d5c5c81a7" alt=""></div>
{% endtab %}

{% tab title="Example 2" %}
**Input:** \[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.

<div align="left"><img src="https://1091135627-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MEmU-aGQcUvtjjAH8_3%2F-M_p_p_w1hHZ36pAxcvd%2F-M_pahHjfAOWGJyuaamw%2Fimage.png?alt=media&amp;token=5606b192-6228-4ce6-9ac4-c24222c9640f" alt=""></div>
{% endtab %}
{% endtabs %}

### **Solutions**

{% tabs %}
{% tab title="TreeNode" %}

```java
// Definition for a binary tree node.
public class TreeNode {
	int val;
	TreeNode left;
	TreeNode right;
	TreeNode() {}
	TreeNode(int val) {
		this.val = val;
	}
	TreeNode(int val, TreeNode left, TreeNode right) {
		this.val = val;
		this.left = left;
		this.right = right;
	}
}
```

{% endtab %}

{% tab title="Solution 1" %}

```java
/**
 * Time complexity : 
 * Space complexity : 
 */

class Solution {
    private int count = 0;
    
    public int minCameraCover(TreeNode root) {
        return dfs(root) > 2? count + 1: count;
    }
    
    private int dfs(TreeNode node) {
        if(node == null) {
            return 0;
        }
        int val = dfs(node.left) + dfs(node.right);
        if(val == 0) {
            return 3;
        }
        if(val < 3) {
            return 0;
        }
        count++;
        return 1;
    }
}
```

{% endtab %}
{% endtabs %}

### **Follow up**

*
