leetcode968. 监控二叉树(dfs)

给定一个二叉树,我们在树的节点上安装摄像头。

节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。

计算监控树的所有节点所需的最小摄像头数量。

输入:[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;//告诉父节点要装监控,不然这个节点就没监控了
    }
}
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页