zoukankan      html  css  js  c++  java
  • 【力扣】968. 监控二叉树

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

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

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

    示例 1:

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

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

    提示:

    给定树的节点数的范围是 [1, 1000]。
    每个节点的值都是 0。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/binary-tree-cameras

     思考:

      根据题目:每个节点可以有三个状态: 0 未被监控覆盖到、1 已经被覆盖到、2当前节点就是监控点

     

    int result = 0;
        public int minCameraCover(TreeNode root) {
            //随便给一个二叉树
            //根据题目:每个节点可以有三个状态: 0 未被监控覆盖到、1 已经被覆盖到、2当前节点就是监控点
            //如果当前节点是一个叶子节点,因为他是没有子节点的,所以可以认为它的子节点已经被覆盖了,也就是1 
            if(dfs(root) == 0){
                result++;
            }
            return result;
        }
    
        public int dfs(TreeNode root){
            if(root == null){ // 如果当前是空的,则任务当前节点被监控覆盖了
                return 1;
            }
            int leftValue = dfs(root.left);
            int rightValue = dfs(root.right);
            if(leftValue == 1 && rightValue == 1){
                // 如果两个叶子节点都被监控覆盖了,那么当前节点就没有被监控
                return 0;
            }
            if(leftValue == 0 || rightValue == 0){
                //说明这两个叶子节点有个没有被监控
                result++;
                return 2;
            }
            //否则,说明有个叶子节点为2 ,那么就直接把当前节点设置为被监控到
            return 1;
        }
    一个入行不久的Java开发,越学习越感觉知识太多,自身了解太少,只能不断追寻
  • 相关阅读:
    android29
    android28
    android27
    android26
    Dynamics CRM2011 MspInstallAction failed when installing an Update Rollup
    Dynamics CRM Import Solution Attribute Display Name description is null or empty
    The service cannot be activated because it does not support ASP.NET compatibility
    IIS部署WCF报 无法读取配置节“protocolMapping”,因为它缺少节声明
    Unable to access the IIS metabase.You do not have sufficient privilege
    LM算法与非线性最小二乘问题
  • 原文地址:https://www.cnblogs.com/fengtingxin/p/13714030.html
Copyright © 2011-2022 走看看