力扣第968题 监控二叉树 c++ hard题 二叉树的后序遍历 + 模拟 + 贪心

题目

968. 监控二叉树

困难

相关标签

树   深度优先搜索   动态规划   二叉树

给定一个二叉树,我们在树的节点上安装摄像头。

节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。

计算监控树的所有节点所需的最小摄像头数量。

示例 1:

输入:[0,0,null,0,0]
输出:1
解释:如图所示,一台摄像头足以监控所有节点。

示例 2:

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


提示:

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

思路和解题方法

代码的目的是解决二叉树问题,具体来说是判断在二叉树中最少需要安装多少个监控摄像头才能覆盖所有节点。这里的监控摄像头可以覆盖其所在节点、其父节点以及其子节点。

该问题可以通过递归遍历二叉树的方式来解决。对于每个节点,有以下几种情况:

  1. 如果当前节点为空,返回2表示该节点不需要被监控。
if (cur == NULL) return 2;
  1. 如果左右子树都不需要被监控,则当前节点需要被监控,并且需要安装一个监控摄像头。
if (left == 2 && right == 2) return 0;
  1. 如果左右子树中有节点需要被监控,则当前节点不需要被监控。
if (left == 0 || right == 0) { ans++; return 1; }
  1. 如果左右子树中有节点已经被监控,则当前节点不需要被监控。
if (left == 1 || right == 1) return 2;
  1. 其他情况返回-1。
return -1;

在递归遍历完整棵树后,根据根节点的返回值来确定是否需要在根节点处安装监控摄像头。

if (traversal(root) == 0) { ans++; }

最终,函数返回需要安装的监控摄像头数量。

在这个代码中,变量ans记录需要安装的监控摄像头数量。函数traversal返回值有以下几种情况:

  • 返回2表示当前节点不需要被监控。
  • 返回1表示当前节点已被监控。
  • 返回0表示当前节点需要被监控。

通过递归遍历左右子树,可以得到左右子树的返回值,从而判断当前节点是否需要被监控。如果需要被监控,则在ans中增加1。

复杂度

        时间复杂度:

                O(N)

时间复杂度是O(N),其中N是二叉树中节点的数量。因为我们需要遍历每个节点一次来判断是否需要安装监控摄像头,所以时间复杂度与节点数量成正比。

        空间复杂度

                O(N)

空间复杂度是O(N),其中H是二叉树的高度。在递归过程中,系统会使用栈来保存每个递归调用的上下文信息。最坏情况下,二叉树是一个单链表,高度为N,此时递归调用的深度也是N,所以空间复杂度为O(N)。

c++ 代码

class Solution {
public:int ans;  // 记录需要安装的监控摄像头数量int traversal(TreeNode* cur) {if (cur == NULL) return 2;  // 当前节点为空,返回2表示该节点不需要被监控int left = traversal(cur->left);  // 递归遍历左子树int right = traversal(cur->right);  // 递归遍历右子树if (left == 2 && right == 2) return 0;  // 左右子树都不需要被监控,则当前节点需要被监控if (left == 0 || right == 0) {  // 左右子树中有节点需要被监控ans++;  // 安装一个监控摄像头return 1;  // 返回1表示当前节点已被监控}if (left == 1 || right == 1) return 2;  // 左右子树中有节点已被监控,则当前节点不需要被监控return -1;  // 若出现其他情况,返回-1}int minCameraCover(TreeNode* root) {ans = 0;if (traversal(root) == 0) {ans++;  // 根节点需要被监控,安装一个监控摄像头}return ans;  // 返回需要安装的监控摄像头数量}
};

觉得有用的话可以点点赞,支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

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

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

相关文章

在CentOS上用yum方式安装MySQL8真实全过程记录(顺利版本)

此文参考我前面的文章《在CentOS上用yum方式安装MySQL8过程记录》&#xff0c;之前比较曲折&#xff0c;现在再安装一台mysql。 因为之前很多坑已经走过&#xff0c;加上这台Linux之前没安装过MYSQL&#xff0c;所以整个过程算是非常顺利。 安装环境&#xff1a;centos7 mysql…

如何实现可靠的数据调度同步,数据同步方案看一下!

随着企业规模不断扩大&#xff0c;分支机构越来越多&#xff0c;跨区域跨国的集团越来越多&#xff0c;越来越多的企业要求内部各种业务数据在服务器、数据中心甚至云上&#xff0c;能够进行实时的调度和同步&#xff0c;从而需要部署一套数据同步方案&#xff0c;实现服务器与…

甘特图组件DHTMLX Gantt用例 - 如何自定义任务、月标记和网格新外观

dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 本文将为大家揭示DHTMLX Gantt自定义的典型用例&#xff0c;包括自定义任务、网格的新外观等&#xff0c;来展示其功能的强大性&…

浙江爱知道控股集团,数字化经营的实践者,科技降本增效,助力基业长青

拥抱时代浪潮&#xff0c;加速科技变革。10月27日&#xff0c;浙江爱知道控股集团于西子智慧产业园西子音乐厅举办“AIGC可持续发展峰会”&#xff0c;重点探讨了数字化经营的重要意义。 提高效率和降低成本&#xff1a;数字化经营可以优化和自动化企业的业务流程&#xff0c;提…

软信天成:数据质量管理对企业有什么意义?

在这个信息爆炸的时代&#xff0c;数据已经成为了企业决策的基础&#xff0c;是企业成功的关键要素。然而&#xff0c;如果企业所获取的数据质量不佳&#xff0c;会对企业产生何种影响呢&#xff1f; 事实上&#xff0c;有效而准确的数据可以揭示出潜在的业务机遇&#xff0c;…

接触式静电压测量仪的用途和操作方法

接触式静电压测量仪是一种用于测量静电电荷的仪器&#xff0c;主要用于工业生产和科学研究领域。它可以测量静电电压、静电场强、静电电荷等参数&#xff0c;对于静电控制和环境监测等方面具有重要的作用。 接触式静电压测量仪的操作方法如下&#xff1a; 接通电源&#xff1a;…

什么是 CNN? 卷积神经网络? 怎么用 CNN 进行分类?(1)

先看卷积是啥&#xff0c;url: https://www.bilibili.com/video/BV1JX4y1K7Dr/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 下面这个式子就是卷积 看完了&#xff0c;感觉似懂非懂 下一个参考视频&#xff1a;https://www.y…

【设计模式】第20节:行为型模式之“备忘录模式”

一、简介 备忘录模式也叫快照模式&#xff0c;具体来说&#xff0c;就是在不违背封装原则的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便之后恢复对象为先前的状态。这个模式的定义表达了两部分内容&#xff1a;一部分是…

智慧公厕:打造城市卫生环境提升与革新的新利器

智慧公厕是一种结合先进科技和公共厕所管理的新型智慧管理系统&#xff0c;其主要功能是为市民提供更加便捷、舒适、卫生的厕所使用体验&#xff0c;为管理单位提供一种信息化、数字化、智慧化的管理方式&#xff0c;是城市管理的一个重要领域。 在现代都市生活中&#xff0c;…

Centos7 安装和配置 Redis 5 教程

在Centos上安装Redis 5&#xff0c;如果是 Centos8&#xff0c;那么 yum 仓库中默认的 redis 版本就是 5&#xff0c;直接 yum install 即可。但如果是 Centos7&#xff0c;yum 仓库中默认的 redis 版本是 3 系列&#xff0c;比较老&#xff1a; 通过 yum list | grep redis 命…

2023/10/29总结

总结 踩坑记录 写代码的时候遇到了一个错误大概是这样的 io.jsonwebtoken.security.WeakKeyException: The signing keys size is 48 bits which is not secure enough for the HS256 algorithm. The JWT JWA Specification (RFC 7518, Section 3.2) states that keys used…

Java I/O (输入/输出)

1.流的概念 流是一种有序的数据序列&#xff0c;根据操作类型&#xff0c;可以分为输入流和输出流两种。I/O流&#xff08;输入输出&#xff09;提供了一条通道程序&#xff0c;可以使用这条通道把源中的字节序列送到目的地。 1.1 输入流&#xff1a; 程序从指向源的输入流中读…

【Overload游戏引擎细节分析】standard材质Shader

提示&#xff1a;Shader属于GPU编程&#xff0c;难写难调试&#xff0c;阅读本文需有一定的OpenGL基础&#xff0c;可以写简单的Shader&#xff0c;不适合不会OpenGL的朋友 一、Blinn-Phong光照模型 Blinn-Phong光照模型&#xff0c;又称为Blinn-phong反射模型&#xff08;Bli…

【C++项目】高并发内存池项目第八讲 项目总结和面试问题分享

项目总结面试分享 1.项目总结1.1优点1.2不足1.3面试常见问题 2.面试分享项目部分C语法部分 项目源代码&#xff1a;高并发内存池 1.项目总结 1.1优点 增加动态申请的效率减少陷入内核的次数减少系统内存碎片提升内存使用率尽量减少锁竞争应用于多核多线程场景 1.2不足 当前…

视频增强修复软件Topaz Video AI mac中文版支持功能

Topaz Video AI mac是一款使用人工智能技术对视频进行增强和修复的软件。它可以自动降噪、去除锐化、减少压缩失真、提高清晰度等等。Topaz Video AI可以处理各种类型的视频&#xff0c;包括低分辨率视频、老旧影片、手机录制的视频等等。 使用Topaz Video AI非常简单&#xff…

Lua脚本语言

1. 概念 Lua&#xff08;发音为"loo-ah"&#xff0c;葡萄牙语中的"lua"意为月亮&#xff09;是一种轻量级的、高效的、可嵌入的脚本编程语言。官网Lua最初由巴西计算机科学家Roberto Ierusalimschy、Waldemar Celes和Luiz Henrique de Figueiredo于1993年开…

MySQL(2):环境搭建

1.软件下载 软装去官网下载&#xff08;社区版&#xff09;&#xff1a;https://downloads.mysql.com/archives/installer/&#xff08;历史版本可选&#xff09; 选择下面的&#xff0c;一步到位 2.软件安装 双击 .msi 文件 选完 Custom 自定义后点 next 按 1&#xff0c…

Spring本地jar包依赖项目改为maven依赖

1.简介 我们在做项目的时候&#xff0c;可能会偶尔接手较为古老的项目&#xff0c;这些项目使用了较为老旧的版本管理或依赖管理方法&#xff0c;对于新开发项目来说&#xff0c;这些老旧的依赖管理方式会影响开发效率&#xff0c;所以&#xff0c;一般我们会选择将老项目的依…

asp.net旅游交流管理信息系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 旅游交流管理信息系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c# 语言开发 asp.net旅游交流网站1 应用技…

Gateway服务网关

本篇资料&#xff1a;https://gitee.com/Allengan/cloud-demo.githttps://gitee.com/Allengan/cloud-demo.git 目录 1.为什么需要网关 2.gateway快速入门 1&#xff09;创建gateway服务&#xff0c;引入依赖 2&#xff09;编写启动类 3&#xff09;编写基础配置和路由规则…