本文共 1446 字,大约阅读时间需要 4 分钟。
给定一个二叉树,我们在树的节点上安装摄像头。
节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。
计算监控树的所有节点所需的最小摄像头数量。
示例 1:
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-cameras 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int minCameraCover(TreeNode root) { if(root==null) return 0; if(root.left==null && root.right==null) return 1; return new Op(root).get(); } static class Op{ final TreeNode root; final int no_cover = 0,has_camera = 1, has_cover =2; int res; int dfs(TreeNode root) { if(root==null) return has_cover; int left = dfs(root.left),right = dfs(root.right); //被监测到 if(left == has_cover && right==has_cover) return no_cover; //左右子树没有监测,要在这个点 监测 if(left==no_cover|| right==no_cover) { res++; return has_camera; } //cur node no camera and has not be cover if(left==has_camera||right==has_camera) { return has_cover; } return no_cover; } Op(TreeNode root) { this.root = root; } int get() { int node = dfs(root); if(node==no_cover) return res+1; return res; } }}