每一个监控器可以监控,它的子节点和父节点,如何使用最少的监控器来监控整个数呢?
对于这个问题只需要设置三种状态,来应对不同的情况就可以了。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution{
private int ans = 0;
public int minCameraCover(TreeNode root) {
if(lrd(root) == 0){
ans++;
}
return ans;
}
private int lrd(TreeNode node){
if(node == null) return 1;
int left = lrd(node.left);
int right = lrd(node.right);
//子节点含有叶子节点
if(left == 0 || right == 0){
ans++;
return 2;
}
// 叶子节点
if(left == 1 && right == 1){
return 0;
}
if(left+right >= 3){
return 1;
}
return -1;
}
}