监控二叉树 | LeetCode-968 | 贪心算法
贪心练习题
1.题目描述
给定一个二叉树,我们在树的节点上安装摄像头。
节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。
计算监控树的所有节点所需的最小摄像头数量。
示例 1:
1 | 输入:[0,0,null,0,0] |
示例 2:
1 | 输入:[0,0,null,0,null,0,null,null,0] |
提示:
- 给定树的节点数的范围是
[1, 1000]
。 - 每个节点的值都是 0。
2.题解
2.1 贪心算法
- 思路:
count
变量用于统计所需的摄像头总数。- 方法
traversal
用递归方式检查每个节点的状态:- 若节点为空,返回
2
(视为已覆盖)。 - 左右子节点检查的结果用于决定当前节点的状态。
- 若节点为空,返回
- 三种主要情况:
- 若左右子节点都已覆盖,则当前节点未覆盖,需要返回
0
。 - 若左右子节点有任一未覆盖,则在当前节点放置摄像头,返回
1
并增加计数。 - 若左右子节点至少有一个有摄像头,则当前节点已覆盖,返回
2
。
- 若左右子节点都已覆盖,则当前节点未覆盖,需要返回
1 | class Solution { |
-------------本文结束感谢您的阅读-------------