zoukankan      html  css  js  c++  java
  • 二叉树放置照相机 Binary Tree Cameras

    2019-03-27 15:39:37

    问题描述:

    问题求解:

    很有意思的问题,问题描述简单,求解过程也可以非常的简洁,是个难得的好题。

    求解的过程是自底向上进行分析,对于叶子节点,如果在叶子上放置照相机,显然是没有在其parent上放置相机来的合适的,因为叶子节点的覆盖范围没有其parent节点大。

    因此,我们就可以对所有的叶子的节点的parent进行放置相机,同时将所有已经覆盖掉的节点去除掉。

    对于剩下的节点重复上述的操作即可。

    这里在求解的时候并不需要真实的去删除节点,只要在每个节点上加上标注信息就可以了。

    叶子节点 :1

    放置照相机 :2

    已经被cover节点 :3

        public int minCameraCover(TreeNode root) {
            int[] res = new int[1];
            int state = helper(root, res);
            if (state == 1) res[0]++;
            return res[0];
        }
        
        // 1 : leaf
        // 2 : camera
        // 3 : covered
        private int helper(TreeNode root, int[] res) {
            if (root == null) return 3;
            int l = helper(root.left, res);
            int r = helper(root.right, res);
            if (l == 3 && r == 3) return 1;
            else if (l == 1 || r == 1) {
                res[0]++;
                return 2;
            }
            else return 3;
        }
    

      

  • 相关阅读:
    U盘支持启动windows和Linux
    emacs安装
    npm 安装指定的第三方包
    npm安装第三方包
    npm 安装淘宝镜像
    ssm 环境搭建
    gitBook安装简介
    git 博客搭建
    git 多人开发
    git ssh提交
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/10608049.html
Copyright © 2011-2022 走看看