zoukankan      html  css  js  c++  java
  • 力扣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
            } 
        }
    }
  • 相关阅读:
    关于路径的小知识点
    转发与重定向
    一种反复的读写文件的方法
    文字排版reportlab
    Qgis中插件的安装位置
    spyder打开文件假死解决
    地图跳跃-超级码力
    尾部的零
    一探torch.nn究竟“What is torch.nn really?”
    KAZE特征和各向异性扩散滤波
  • 原文地址:https://www.cnblogs.com/zhaojiayu/p/15463763.html
Copyright © 2011-2022 走看看