刷题笔记:力扣第968题-监控二叉树
1.本题是一道贪心算法问题数据结构为二叉树。根据题意可以想到尽可能在父节点上安装摄像头就能实现局部贪心最终实现整体贪心。需要将每个节点分为三种状态1状态0无覆盖既没有摄像头也没有被别的节点监控到。2状态1有摄像头可以监视其父节点和子节点。3状态2有覆盖即自身没有摄像头但已经被其父节点或子节点监控到。2.二叉树还是需要从最底层来后续遍历使用dfs回溯来从下往上递推。根据每个节点采集来的左右节点的状态可以判断自身节点处于什么状态并返回给其父节点1如果左右节点状态有任何一个为0说明当前节点必须安装摄像头来监控到子节点返回状态1。2如果左右节点状态有任何一个为1即至少有一个摄像头则说明当前节点能被覆盖到不需要再安装摄像头返回状态2。3如果左右节点状态全为2说明当前节点的最优解是被其父节点监控到返回状态0。4特殊情况如果当前节点为空节点说明其父节点是当前根系的最底层。空节点不能要求其父节点安装摄像头所以返回状态2。3.主函数的特殊情况如果最后的根节点处的返回值为0此时已经没有父节点来安装摄像头了所以必须在根节点安装摄像头数量1。1. /** 2. * Definition for a binary tree node. 3. * struct TreeNode { 4. * int val; 5. * struct TreeNode *left; 6. * struct TreeNode *right; 7. * }; 8. */ 9. // 返回值状态定义 10. // 0当前节点未被摄像头覆盖需要父节点安装摄像头 11. // 1当前节点安装了摄像头可以覆盖父、子节点 12. // 2当前节点无摄像头但已被子节点摄像头覆盖 13. int dfs(struct TreeNode* node, int* cameras){ 14. // 空节点视作已经被覆盖返回2 15. if (!node) return 2; 16. 17. // 后序遍历先处理左右子树 18. int l dfs(node-left, cameras); 19. int r dfs(node-right, cameras); 20. 21. // 左/右孩子有未被覆盖(0)当前节点必须装摄像头 22. if (l 0 || r 0){ 23. (*cameras); 24. return 1; 25. } 26. 27. // 左/右孩子装有摄像头(1)当前节点被覆盖无需装摄像头 28. if (l 1 || r 1){ 29. return 2; 30. } 31. 32. // 左右都被覆盖(2)当前节点暂时无摄像头等待父节点覆盖自己 33. if (l 2 r 2){ 34. return 0; 35. } 36. 37. return -1; 38. } 39. 40. int minCameraCover(struct TreeNode* root) { 41. int cameras 0; 42. int rootStatus dfs(root, cameras); 43. // 根节点返回0根没有父节点必须额外装一个摄像头 44. if (rootStatus 0) { 45. cameras; 46. } 47. 48. return cameras; 49. }该算法时间复杂度和空间复杂度均为O(n)n为树中节点的数量。

相关新闻

Docker部署MySQL全攻略:从环境一致性到生产级配置

Docker部署MySQL全攻略:从环境一致性到生产级配置

1. 项目概述:为什么选择Docker部署MySQL? 在数据库运维和开发环境搭建的日常工作中,MySQL的安装和配置一直是个绕不开的环节。传统的安装方式,无论是通过系统包管理器(如 apt 、 yum )还是下载官方二进…

2026/11/1 19:43:01 阅读更多 →
我做了一款 Windows 本地同声传译软件

我做了一款 Windows 本地同声传译软件

最近一直在开发一款 Windows 本地同声传译软件,名字叫 Coollate。 它目前解决的核心问题非常直接: 用户说中文,软件实时生成中文原文、英文字幕,并自动播放英文译音。 翻译后的英文声音不仅可以从扬声器或耳机播放,还…

2026/11/2 7:37:32 阅读更多 →
构建最小智能体计算机:嵌入式AI的硬件选型与模型部署实战

构建最小智能体计算机:嵌入式AI的硬件选型与模型部署实战

1. 项目概述:从“计算机”到“智能体”的形态演变 最近在和一些做嵌入式系统和边缘计算的朋友聊天,大家不约而同地都在讨论一个话题:当“智能体”这个概念从云端的大型模型,逐渐下沉到我们手边的设备时,它的物理形态会…

2026/11/2 5:42:56 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/3 1:09:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/2 10:46:11 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/2 10:47:40 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/3 2:27:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/2 10:46:31 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/2 10:46:26 阅读更多 →

日新闻

周新闻

月新闻