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开发,越学习越感觉知识太多,自身了解太少,只能不断追寻
  • 相关阅读:
    react native
    快速幂模板
    Java异常归纳
    Java环境变量配置
    过滤器
    cookie和session页面随机数和防止重复提交
    javabean&el&jstl
    servlet&jsp
    Tomcat和Servlet入门
    网络编程
  • 原文地址:https://www.cnblogs.com/fengtingxin/p/13714030.html
Copyright © 2011-2022 走看看