【LeetCode每日一题】——968.监控二叉树

news2024/9/27 12:13:48

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【解题思路】
  • 七【题目提示】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

二【题目难度】

  • 困难

三【题目编号】

  • 968.监控二叉树

四【题目描述】

  • 给定一个二叉树,我们在树的节点上安装摄像头。
  • 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。
  • 计算监控树的所有节点所需的最小摄像头数量。

五【题目示例】

  • 示例 1:

    • 在这里插入图片描述
    • 输入:[0,0,null,0,0]
    • 输出:1
      • 解释:如图所示,一台摄像头足以监控所有节点。
  • 示例 2:

    • 在这里插入图片描述
    • 输入:[0,0,null,0,null,0,null,null,0]
    • 输出:2
      • 解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。

六【解题思路】

  • 通过理解题意可以发现,任意一个节点只有三种情况(用数字对应每一种情况):
    • 1:当前节点有摄像头
    • 2:当前节点没有摄像头,但是可以观察到
    • 3:当前节点没有摄像头,并且不可以被观察到
  • 利用这三种情况来判断是否可以给当前节点赋“摄像头”
  • 还需要注意,如果要达到最小的“摄像头”数量,叶子节点肯定不能放摄像头,否则数量不是最小
  • 还需要注意要从下向上遍历整棵树,因为要从叶子节点开始判断,所以使用后序遍历,在遍历的过程中可能有以下几种情况:
    • 如果当前节点为空,说明遍历到分支了,也就是叶子节点,默认叶子节点可以被观察到,但是不能赋“摄像头”,那么返回2
    • 如果当前节点的左右子节点有一个为3,说明当前节点要赋“摄像头”,“摄像头”数量加一,并且返回1
    • 如果当前节点的左右子节点有一个为1,说明当前节点可以被观察到,所以返回2
    • 其余的情况说明当前节点的左右子节点都没有摄像头,但是可以被观察到,那么当前节点不能赋“摄像头”,否则就不是最小数量了,返回3,表示需要一个“摄像头"来处理此节点,等待其余的遍历步骤处理
    • 最后还要判断一下根节点是否需要赋“摄像头”,因为是从下向上遍历二叉树
  • 最后返回结果即可

七【题目提示】

  • 给 定 树 的 节 点 数 的 范 围 是 [ 1 , 1000 ] 。 给定树的节点数的范围是 [1, 1000]。 [1,1000]
  • 每 个 节 点 的 值 都 是 0 。 每个节点的值都是 0。 0

八【时间频度】

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n为树的节点个数
  • 空间复杂度: O ( 1 ) O(1) O(1)

九【代码实现】

  1. Java语言版
class Solution {

    int res = 0;

    public int minCameraCover(TreeNode root) {
        if(getRes(root) == 3){
            res++;
        }
        return res;
    }

    public int getRes(TreeNode root){
        if(root == null){
            return 2;
        }
        int left = getRes(root.left);
        int right = getRes(root.right);
        if(left == 3 || right == 3){
            res++;
            return 1;
        }
        if(left == 1 || right == 1){
            return 2;
        }
        return 3;
    }

}
  1. C语言版
int getRes(struct TreeNode* root,int* res)
{
    if(root == NULL)
    {
        return 2;
    }
    int left = getRes(root->left,res);
    int right = getRes(root->right,res);
    if(left == 3 || right == 3)
    {
        (*res)++;
        return 1;
    }
    if(left == 1 || right == 1)
    {
        return 2;
    }
    return 3;
}

int minCameraCover(struct TreeNode* root)
{
    int res = 0;
    if(getRes(root,&res) == 3)
    {
        res++;
    }
    return res;
}

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. C语言版
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/97384.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

入门:从虚拟机到容器

从虚拟机到容器 前面我们成功安装了Docker学习环境,以及浅尝了一下Docker为我们带来的应用快速部署。在正式进入学习之前,我们就先从Docker的发展开始说起。 在Docker出现之前,虚拟化技术可以说是占据了主导地位。首先我们来谈谈为什么会出现…

Adobe Pro DC 2022 软件详细安装教程

一、软件下载 网盘链接:Adobe Pro DC 2022 提取码:ib19 二、详细安装教程 1、解压安装包,右键安装程序Set-up,点击以管理员身份运行 2、更改软件安装位置,建议安装至除C盘外的其他盘(如不需更改直接点击【继续】即可…

自学编程的朋友,我想给你们这 5 个建议

0基础学编程,我想给你这 5 个建议 很多人都想转行互联网,不管是出于兴趣、行业前景还是薪资的考虑,想要转行互联网的人们必须要面对一个问题,那就是如何自学编程,更确切的说,是如何0基础学编程。 其实我基…

小师弟:2022广东省工科赛分享(越障排爆省一,完整项目)

目录日常唠嗑前言一、实验效果二、赛题分析及方案1、赛题内容:初赛:决赛:2、实施方案:三、材料选择四、程序设计程序思路PID:越障部分:颜色识别部分:五、竞赛心得六、工程获取日常唠嗑 小师弟说…

J-002 Jetson电路设计之电源设计--NANO XAVIER NX

Jetson电源设计1 电源说明1.1 电源和系统引脚描述1.2 电源控制框图详情2 上电的时许2.1 框图分析2.2 上电时序3 GND引脚1 电源说明 Jetson NANO和XAVIER NX核心板的电源为DC-5V。 1.1 电源和系统引脚描述 PIN名称描述方向类型251-260VDD_IN主电源输入5.0V235PMIC_BBATRTC时钟…

深入剖析Linux RCU原理(二)-渐入佳境

说明: Kernel版本:4.14ARM64处理器,Contex-A53,双核使用工具:Source Insight 3.5, Visio 1. 概述 我会假设你已经看过了深入剖析Linux RCU原理(一)初窥门径 本文将进一步去探索下…

设计模式4 - 行为型模式

23种设计模式分析与见解开篇、UML、软件设计原则https://blog.csdn.net/lili40342/article/details/128358435创建型模式https://blog.csdn.net/lili40342/article/details/128358392结构型模式https://blog.csdn.net/lili40342/article/details/128358313行为型模式https://bl…

【GRU时序预测】基于matlab卷积神经网络结合门控循环单元CNN-GRU时间序列预测【含Matlab源码 2287期】

⛄一、CNN-GRU数据预测 1 理论基础 1.1 CNN算法 负荷序列数据为一维数据,用一维卷积核对数据进行卷积处理,以获取数据的特征。 现设定卷积核的维度为3,移动步长为1,对输入数据进行卷积,以获得特征图图谱,即…

转行AI产品经理的学习过程

学习内容及思考 引言 当别人问你为什么转行AI产品经理? 你回答因为自己喜欢。 这是一句多么空洞的话呀,苍白又无力,那你为什么喜欢呢?你了解他么?仅凭自己这一腔热情,一句轻描淡写的我喜欢,是…

行为树 --- [7] BehaviorTree.CPP 4.x版本的编译及使用

根据BehaviorTree.CPP的官方介绍,3.x版本已经不再维护了,建议使用4.x版本, 4.x版本和3.x版本的区别可以看这里 — https://www.behaviortree.dev/migration 本文介绍4.x版本的编译及使用,环境是Debian 10.5,编译器是…

笔试强训(四十七)

目录一、选择题二、编程题2.1 合唱团2.1.1 题目2.1.2 题解2.2 马戏团2.2.1 题目2.2.2 题解一、选择题 (1)对于IP地址130.63.160.2,MASK为255.255.255.0,子网号为(B) A.160.2 B.160 C.63.160 D.130.63.160 …

学Python好找工作吗?需要满足Python岗位哪些要求?

学Python好找工作吗?需要满足哪些要求?随着Python的火爆,国内Python的岗位也随之增多,只要技术能力强项目经验充足,找到工作不是问题。即使是一些二线城市,Python的薪资待遇也比较好。 一、学Python好找工作…

学习编程的中小学生越来越多,是盲目追风,还是确有其用?!

首先,中小学生为什么要学习编程?未来社会,随姜信息技术和人工智能的发展,越来越多行业的工作离不开编程。美国前总统奥巴马就呼吁:“如果我们想让美国保持地位,就需要年轻代的美国人掌握这种(编程)工具和技术,它将改变我们所有的…

最简单的canvas基础+实践,确定不进来看看嘛

前言 怎么突然提到 canvas 呢❓其实是因为工作中有一个小需求,就是给特定的区域做水印😤,思来想去😎就选择使用 canvas 去做,简单效果如下: 实现思路🤷‍♂️:封装一个全局指令&am…

新装的Ubuntu无法连接有线(无有线标志)

解决方法 1、lspci命令(查看网卡型号) labhlab:~$ lspci 00:00.0 Host bridge: Intel Corporation Device 4660 (rev 02) 00:01.0 PCI bridge: Intel Corporation Device 460d (rev 02) 00:06.0 PCI bridge: Intel Corporation Device 464d (rev 02) 0…

【图像增强】局部对比度增强的CLAHE算法直方图增强【含Matlab源码 1341期】

⛄一、简介 基于matlab局部对比度增强的CLAHE算法直方图增强 ⛄二、部分源代码 %% tic %% 清空工作区与变量 clc; clear; for image_number1:1 imageNamestrcat(num2str(image_number),‘.jpg’); img imread(imageName); %% 在LAB空间进行去雾 % RGB转LAB transform mak…

【数据结构】堆(一)——堆的实现

作者:一个喜欢猫咪的的程序员 专栏:《数据结构》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 目录 堆的概念及结构: 堆的实现思路:(我…

【教学类-23-01】20221217《不会写学号的中班幼儿的学号描字贴》(中班描字)

成品样式: 每个孩子3页A4横板,供6次书写 打印样式: 背景需求: 前期进行6次的Python学具教学活动,对中3班幼儿书写学号和名字的情况评估: 筛选出10位需要练习学号的幼儿。 学号、名字需要持续性、强化性练…

科技改变世界,科技改变世界杯

2022年11月20日,2022年卡塔尔世界杯(英语:FIFA World Cup Qatar 2022)在充满阿拉伯风情的开幕式中拉开了帷幕。 相比以往世界杯,今年卡塔尔世界杯在赛场上加设的黑科技,让我们在赛场上反复领略到了各种剧情…

机器学习100天(四):004 数据预处理之类别特征编码

机器学习100天,今天讲的是:数据预处理之类别特征编码。 在上一节,我们对特征 X 的 NaN 值进行了平均数插值处理。 我们打开 X,查看第一列特征,国家这一列: 发现这一列特征都是字符串,例如:法国、德国、韩国。 大部分机器学习模型,字符串类别特征是不能用来直接进行…