当前位置: 首页 > news >正文

刷题笔记:力扣第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为树中节点的数量)。

http://www.jsqmd.com/news/1380144/

相关文章:

  • 浙江GEO优化服务商哪家好?2026自研技术、落地效果深度对比测评 - 商业新知
  • MySQL int(11)与Java数据类型:存储原理、映射实践与性能优化
  • 2026年实验室通风柜怎么选?材质、标准、厂家实力,一篇讲透 - 深度智识库
  • Python环境高效部署指南:国内镜像加速与全流程配置详解
  • CAMERA-CMOS
  • 2026 武汉图文店必备资质:印刷经营许可证办理条件与周期一文看懂 - 招小财
  • Rust 编译期安全的边界:类型系统拦不住哪些问题
  • 第79章 「认知战」—— 墨子篇
  • 【集训】ZR集训——图论(2)
  • 【2014-05-11】某《魔鬼训练营》读书笔记:活跃主机探测
  • Claude Code:AI编程助手核心能力、配置与实战指南
  • 自主订单履约适合你的企业吗?(2026)
  • 2026卖家精灵一年多少钱?单人版、标准版、高级版、VIP价格及优惠折扣码整理 - 麦麦唛
  • 钣金镶嵌防水紧固件源头厂商盘点 华南厂家支持非标定制打样 - 变量人生001
  • 大模型微调避坑指南:LoRA实战中的四大工程陷阱与解决方案
  • 鼻基底自填2.0:分层定点支撑技术解析与材料选择指南
  • 2026年求职APP全面盘点:如何在众多选择中选到最适合自己的?附避坑指南与靠谱平台推荐 - 产业观察报
  • 孩子被同事投诉辞职后几年不工作怎么办?雅方咨询效果如何? - 生活动态圈
  • ## 落地干货|广东天气多变,企业团建必须掌握的“晴雨双预案” - 友人团建
  • 深度揭秘东海县建设局网站:官方平台的功能、便民服务与改革成效全解析
  • 深入解析Xilinx 7系列FPGA MIG物理层接口:从原理到调试实战
  • C++贪吃蛇项目实战:从控制台游戏理解面向对象与游戏循环
  • 理想L6换胎指南:新能源SUV的轮胎怎么选? - 资讯在线
  • 2026年8月重庆市当天取眼镜门店时效科普:核心知识与常见疑问、最新要点与实用解读、当前变化和行业参考,关键事项一文讲清 - 小校长
  • 手撕ARM64启动栈(八):QEMU + TF-A(ATF) OP-TEE 初始化详解
  • 动态规划进阶:方格取数问题中按列DP与两次扫描的解法详解
  • 长期出卡渠道:京东 E 卡回收,看懂回收行情实现稳妥变现 - 甄选测评官
  • 2026深圳港澳旅行社专业测评报告|基于OTA大数据与**资质的消费参考 - 互联网科技品牌测评
  • 纺织印染生产线底层通信重构:破解非标异构协议的边缘解析算法与伪代码实战
  • 仓库管理的主要内容和流程:入库、出库、盘点、调拨,仓管人必学