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开发,越学习越感觉知识太多,自身了解太少,只能不断追寻
  • 相关阅读:
    Linux下查找软件,rpm命令 dpkg命令 apt命令
    python3 requests的content和text方法
    python3爬虫超简单实例
    python3 爬取深圳主板公司名称,公司网址
    python3 类的学习
    ubuntu16.04同时使用 pyhton2.7和3.5,并随意切换
    (4)puppet常用的资源及其常用属性
    (3)puppet清单定义资源的语法
    (2)puppet单机测试命令apply
    lvs+keepalived高可用负载均衡
  • 原文地址:https://www.cnblogs.com/fengtingxin/p/13714030.html
Copyright © 2011-2022 走看看