首页 > 其他 > 详细

【leetcode 968. 监控二叉树】解题报告[待完善...]

时间:2019-05-01 23:24:13      阅读:270      评论:0      收藏:0      [点我收藏+]

技术分享图片

方法一:递归

    // 0:该节点安装了监视器 1:该节点可观,但没有安装监视器 2:该节点不可观
    int monitor = 0;
    int state(TreeNode* node)
    {
        if (node == nullptr) return 1;
        int left  = state(node->left);
        int right = state(node->right);
        // 该节点为0的情况
        if (left == 2 || right == 2)
        {
            monitor++;  // 由于左或右节点不可观,则需要给当前节点安装监视器,为0状态
            return 0;
        } // 为1的情况
        else if (left == 0 || right == 0)
            return 1;   // 由于左或右节点安装了监视器,当前节点就不需要安装监视器也可观了,为1状态
        // 为2的情况
        else    // 其他:即为left==1&&right==1,左右节点都可观,但没有监视器,当前节点不可观,为2状态
            return 2;
    }
    int minCameraCover(TreeNode *root)
    {
        if (root == nullptr) return 0;
        if (state(root) == 2) monitor++;    // 如果这个节点为2的状态,需要加一个监视器
        return monitor;
    }

解题思路: 由于叶子节点一定不要安装监视器,这样才能使总监视器数量比较少,因此需要从下往上进行判断当前节点的状态(共:3种状态):

  • 0: 当前节点安装了监视器
  • 1: 当前节点可观,但没有安装监视器
  • 2: 当前节点不可观

对于叶子节点,我们认为不可观

 

【leetcode 968. 监控二叉树】解题报告[待完善...]

原文:https://www.cnblogs.com/brianyi/p/10801186.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!