[路飞]leetcode-968.监控二叉树

95 阅读1分钟

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

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

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

 

示例 1:

输入: [0,0,null,0,0]
输出: 1
解释: 如图所示,一台摄像头足以监控所有节点。

示例 2:

输入: [0,0,null,0,null,0,null,null,0]
输出: 2
解释: 需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。

解题:

var minCameraCover = function(root) {
    let res=0;
    if (dfs(root) == 0) {
        res++;
    }
    function dfs(node) {
        if (node == null) return 1;
        let left=dfs(node.left);
        let right=dfs(node.right);
        if (left == 0 || right == 0) {
            res++;
            return 2;
         }
        if(left==1&&right==1) return 0;
        if(left == 2 || right == 2) return 1;
     }
    return res;
};