给定一个二叉树,我们在树的节点上安装摄像头。
节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。
计算监控树的所有节点所需的最小摄像头数量。
示例 1:

1 2 3
| 输入:[0,0,null,0,0] 输出:1 解释:如图所示,一台摄像头足以监控所有节点。
|
示例 2:

1 2 3
| 输入:[0,0,null,0,null,0,null,null,0] 输出:2 解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。
|
提示:
- 给定树的节点数的范围是
[1, 1000]
。
- 每个节点的值都是 0。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class Solution { private int ans = 0; public int minCameraCover(TreeNode root) { if(root == null){ return ans; } if(dfs(root) == 0){ ++ans; } return ans; }
public int dfs(TreeNode root){ if(root == null){ return 1; } int l = dfs(root.left); int r = dfs(root.right);
if(l == 0 || r == 0){ ans += 1; return 2; }else if(l == 2 || r == 2){ return 1; }else{ return 0; } } }
|