原题目:https://leetcode-cn.com/problems/binary-tree-cameras/
思路:
节点分为三种状态, 1:该节点安装了监视器 2:该节点可观,但没有安装监视器 3:该节点不可观
代码:
class Solution {
int ans = 0;
int dfs(TreeNode* root){
if(root == NULL) return 1;
int left = dfs(root->left),right = dfs(root->right);
// 当前节点是要安装监视器的节点
if(left == 2 || right == 2){
ans ++;
return 0;
}
// 之前按了监视器,可以监控到该节点
else if(left == 0 ||right == 0){
return 1;
}
// 不可以看到这个节点,
else{
return 2;
}
}
public:
int minCameraCover(TreeNode* root) {
if(root==NULL) return 0;
if(dfs(root)==2) ans ++;
return ans;
}
};