给定一个二叉树,我们在树的节点上安装摄像头。
节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。
计算监控树的所有节点所需的最小摄像头数量。
输入:[0,0,null,0,0]
输出:1
解释:如图所示,一台摄像头足以监控所有节点。
代码
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/
class Solution {int cnt=0;public int minCameraCover(TreeNode root) {if(getMinCameraCover(root)==0) cnt++;return cnt;}//返回值代表节点的状态 1是被装了摄像头 2是被子节点罩的 3是0没人罩的public int getMinCameraCover(TreeNode root) {if(root==null) return 2;int l=getMinCameraCover(root.left);int r=getMinCameraCover(root.right);if(l==0||r==0)//子节点没人监控,需要该节点监控他{cnt++;return 1;//告诉父节点 他被监控了}else if(r==1||l==1)//该节点已经被子节点监控了{return 2;//告诉父节点没人监控他}return 0;//告诉父节点要装监控,不然这个节点就没监控了}
}