/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
private:
int result;
//1表示有摄像头 0表示无覆盖 2表示有覆盖
int traversal(TreeNode* cur){
if(cur==nullptr)return 2;
int left=traversal(cur->left);
int right=traversal(cur->right);
//才有后序遍历,从底到高
//左右孩子都有覆盖 那么父节点是无覆盖的
if(left==2&&right==2)
return 0;
//左右孩子都没覆盖 左孩子有摄像头右孩子无覆盖
//左孩子无覆盖右孩子没摄像头 左孩子有覆盖右孩子没覆盖 左孩子没覆盖右孩子有覆盖
//需要在父节点装摄像头
if(left==0||right==0){
result++;
return 1;
}
//左孩子有摄像头或右孩子有摄像头,其父节点都会被覆盖
if(left==1||right==1){
return 2;
}
return-1;
}
public:
int minCameraCover(TreeNode* root) {
result=0;
//判断根节点
if(traversal(root)==0){
result++;
}
return result;
}
};
leetcode 968 监控二叉树
最新推荐文章于 2024-10-08 10:36:00 发布