• 力扣968题(监控二叉树)


    968、监控二叉树

    基本思想:

    贪心

    具体实现:

    从下往上看,

      局部最优:让叶子节点的父节点安摄像头,所用摄像头最少

      整体最优:全部摄像头数量所用最少

    确定遍历顺序:后序遍历

    节点的三种状态用三个数字表示:

      0.本节点无覆盖

      1.本节点有摄像头

      2.本节点有覆盖

      空节点的状态是有覆盖

    递归终止条件:遇到空节点,并返回2(有覆盖)

    单层逻辑:

    1.左右节点都有覆盖,当前节点就无覆盖,返回0,不需要放摄像头

    2.左右节点至少一个无覆盖,当前节点需要放摄像头,返回1,并result++

    3.左右节点至少一个有摄像头,当前节点覆盖了,返回2

     这个图中先判断情况2,在判断情况3

    4.头结点没有覆盖,直接result++

    代码:

    class Solution {
        private int count = 0;
        public int minCameraCover(TreeNode root) {
            if (trval(root) == 0) count++;//情况4
            return count;
        }
        private int trval(TreeNode root){
            if (root == null) return 2;//空节点,该节点有覆盖
            
            int left = trval(root.left);
            int right = trval(root.right);
    
            if (left == 2 && right == 2){// 情况1
                return 0;
            }else if(left == 0 || right == 0){//情况2
                count++;
                return 1;
            }else{
                return 2;//情况3
            } 
        }
    }
  • 相关阅读:
    Java中DAO的实现
    使用Fabric自动化你的任务
    JAVA中处理事务的程序--多条更新SQL语句的执行(包括回滚)
    财政业务流程
    ubuntu 14.04 install google chrom stable
    gcc编译命令
    textread 用法
    ubuntu software
    Coursera.org打不开怎么办
    Presentation__short sentence review mining
  • 原文地址:https://www.cnblogs.com/zhaojiayu/p/15463763.html
Copyright © 2020-2023  润新知