leetCode 968.监控二叉树(利用状态转移+贪心)

968. 监控二叉树 - 力扣(LeetCode)

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

>>解题思路:

        重要线索->题目示例中的摄像头都没有放在叶子节点上!

        摄像头可以覆盖上中下三层,若把摄像头放在叶子节点上,就浪费一层的覆盖。因此把摄像头放在叶子节点的父节点位置,才能充分利用摄像头的覆盖范围

>>思考(ˇˍˇ) 想~为啥不从头结点开始看起呢?为啥从叶子节点看起呢?

        因为头结点放不放摄像头只能省下一个摄像头,叶子节点放不放摄像头省下来了的摄像头数量是指数级别的。也就说我们会从下往上看。局部最优:让叶子节点的父节点安摄像头,所用摄像头最少。整体最优:摄像头所用最少!

        也就说可以用局部最优推出全局最优,且找不出反例,可用贪心!

>>难点:

        ① 二叉树的遍历(后序遍历:左右中,可以在回溯的过程中从下到上进行推导)

        ② 隔两个节点放一个摄像头

>>如何隔两个节点放一个摄像头

由于本题状态转移并没有择优的过程,只是单纯的状态转移!所以不需要用动态规划的状态转移公式!!!

  • 节点的三种状态
    • 0:无覆盖
    • 1:有摄像头
    • 2:有覆盖

思考:为什么没有第四种状态,即无摄像头状态?

因为其实无摄像头就是 无覆盖 或者 有覆盖的状态,所以节点就一共还是三个状态。

分情况讨论

class Solution {
public:int minCameraCover(TreeNode* root) {result = 0;if(traversal(root) == 0) {result++;}return result;}
private:int traversal(TreeNode* cur) {// 空节点,该节点有覆盖if(cur == NULL) return 2; int left = traversal(cur->left);    // 左int right = traversal(cur->right);  // 右// 情况1:左右节点都有覆盖if(left == 2 && right == 2) return 0;// 情况2if(left == 0 || right == 0) {result++;return 1;}// 情况3if(left == 1 || right == 1) return 2;return -1;}int result;
};// 状态
// 无覆盖:0
// 有摄像头:1
// 有覆盖:2// 1.左右都有"覆盖",父节点就设置为"无覆盖"
// 2.左右至少有"无覆盖",父节点就设置为"摄像头"
// 3.左右至少有"摄像头",父节点就设置为"覆盖"// 4.根节点为"无覆盖",增加一个摄像头

来自代码随想录的课堂讲解截图:

参考和推荐文章:

代码随想录 (programmercarl.com)

贪心算法,二叉树与贪心的结合,有点难...... LeetCode:968.监督二叉树_哔哩哔哩_bilibili

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

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

相关文章

不甘于被强势厂商捆绑,中国移动未来或自研5G基站

一直以来运营商被认为只是做服务,而设备等都是由设备商提供的,甚至由于如今的设备高度复杂,设备商已承包越来越多的基站运维工作,运营商的技术水平越来越低,不过随着中国移动发布5G射频芯片8676,似乎显示出…

JVM之选择合适的垃圾收集器(CMS、G1)

1.JVM内存模型,栈、本地方法栈、程序计数器、堆、元空间、方法区、本地方法区,除程序计数器外,其他区域都能进行垃圾收集 2.栈,它的生命周期与线程相同,线程私有,会使用操作系统原生内存,方法…

python过滤敏感词

敏感词一般是指带有敏感政治倾向(或反执政党倾向)、暴力倾向、不健康色彩的词或不文明用语,论坛、网站管理员一般会设定一些敏感词,以防不当发言影响论坛、网站环境。若论坛、网站设置了敏感词,用户编辑的内容又含有敏…

Kafka Shell命令交互

Kafka提供了一个命令行工具,用于管理和与Kafka集群交互。这个命令行工具通常称为Kafka Shell,它允许您执行各种操作,如创建主题、发送和消费消息、查看主题列表等。 以下是一些常用的Kafka Shell命令: 创建主题(Topic): kafka-topics.sh --create --topic my-topic --pa…

Levels - UE5中的建模相关

一些日常的笔记; 可以使用Shapes面板建立基础模型: 可以在PolyModel中继续细分模型: UE5中的建模有PolyGroups概念,可以在Attributes面板中直接编辑: 使用GrpPnt方式可以直接用笔刷设定新的PolyGroups,这样…

抖音SEO矩阵系统源码开发搭建

1. 确定需求和功能:明确系统的主要目标和需要实现的功能,包括关键词研究、短视频制作、外链建设、数据分析、账号设置优化等方面。 2. 设计系统架构:根据需求和功能确定系统的架构,包括前端、后端、数据库等部分的设计&#xff0…

计算机组成原理之硬件的内部结构,拆开单独的硬件,查看硬件组成部分的结构和功能。

大家好,欢迎阅读《计算机组成原理》的系列文章,本系列文章主要教内容是从零学习计算机组成原理,内容通俗易懂,大家好好学习吧!!! 更多的优质内容,请点击以下链接查看哦~~ ↓ ↓ ↓ …

计算机视觉与深度学习-经典网络解析-ZFNet-[北邮鲁鹏]

这里写目录标题 ZFNet主要改进减小第一层卷积核将第二、第三个卷积层的卷积步长都设置为2增加了第三、第四个卷积层的卷积核个数 ZFNet ZFNet是一种基于AlexNet的模型,由Matthew D. Zeiler和Rob Fergus在2013年提出。相对于AlexNet,ZFNet结构与AlexNet网…

由于找不到msvcr110.dll 无法继续执行的解决方法分享(最新)

msvcp110.dll 是 Microsoft Visual C 2010 Redistributable Package 中的一个组件,它包含了一些运行时库文件。当计算机缺少这个文件时,可能会出现一些问题,如程序无法正常运行、系统不稳定等。下面是 6 种修复方法: 第1种方法&am…

【注射论文基因,那些年不为人知的AI工具】

我们都知道写论文有很多前期准备工作&#xff0c;例如<任务书>、<文献综述>等等&#xff0c;那么我们能够用什么工具最大限度的提高完成效率的同时还能保证质量呢&#xff0c;让我们接着往下看&#x1f447; 1.文献快速阅读-iTextMaster 文章主题确定了&#xff0…

Python函数式编程(一)概念和itertools

Python函数式编程是一种编程范式&#xff0c;它强调使用纯函数来处理数据。函数是程序的基本构建块&#xff0c;并且尽可能避免或最小化可变状态和副作用。在函数式编程中&#xff0c;函数被视为一等公民&#xff0c;可以像值一样传递和存储。 函数式编程概念 编程语言支持通…

向建筑人推荐中国建筑出版传媒的《乡村振兴战略下传统村落文化旅游设计》

向建筑人推荐中国建筑出版传媒的《乡村振兴战略下传统村落文化旅游设计》

mysql第二次作业

作业&#xff1a; 创建一个数据&#xff0c;db_classics 创建一张表&#xff1a;t_hero id name nickname age address job weapon group 1 张百川 玉皇大帝 200000 2 孙悟空 齐天大圣 3 林妹妹 创建数据库&#xff0c;创建英雄表 添加对应…

Docker Dockerfile解析

Dockerfile是什么 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 官网&#xff1a;Dockerfile reference | Docker Docs 构建三步骤&#xff1a; 编写Dockerfile文件docker build命令构建镜像docker run依镜像运行容…

基于微信小程的流浪动物救助宠物领养平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

四川天蝶电子商务有限公司可靠吗?真实吗?

​近年来&#xff0c;抖音带货已成为一种日益流行的新零售趋势。而四川天蝶电子商务有限公司作为抖音带货领域的先行者之一&#xff0c;备受消费者关注。但是&#xff0c;我们不能仅凭其名声来评判其可靠性。在对该公司的抖音带货服务进行评估之前&#xff0c;有必要了解和了解…

python使用PyPDF2包:pdf转doc

需要安装 python-docx 和 PyPDF2 pip install python-docx pip install PyPDF2记住&#xff0c;不能直接安装 pip install docx ,不然会报错 ImportError: No module named ‘exceptions’ import PyPDF2 from docx import Documentdef convert_pdf_to_doc(pdf_path, doc_pat…

PHP8的类与对象的基本操作之类常量-PHP8知识详解

php 8引入了一种新的特性&#xff0c;称为类常量&#xff08;class Constants&#xff09;。类常量是在类中定义的常量&#xff0c;类似于全局常量&#xff0c;但作用域仅限于定义它们的类。 在PHP 8中&#xff0c;类常量的作用域被限制在定义它们的类中。这意味着只有类的成员…

【算法思想-排序】根据另一个数组次序排序 - 力扣 1122 题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

学习记忆——宫殿篇——记忆宫殿——记忆桩——学校

教室 桶 走道 桌子 暖气 窗台 后背 窗帘 监视器 白盒子 教师 讲台 表 投影仪 音响 窗 喇叭 黑板 门 栏杆 椅子 食堂 桶 刷卡器 柱子 桌子 风扇 灯罩 一列椅子 地面 大门空间 电视 活动室 盘子 纸盒 油桶 称 水桶 展牌 帘子 消防栓 毯子 储物箱 宿舍 梯子 坐垫 挂件 吊兰 君子…