看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~
谁能九层台,不用累土起!
题目
给定一个二叉树,我们在树的节点上安装摄像头。
节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。
计算监控树的所有节点所需的最小摄像头数量。
示例 1:
1 | 输入: [0,0,null,0,0] |
示例 2:
1 | 输入: [0,0,null,0,null,0,null,null,0] |
提示:
- 给定树的节点数的范围是
[1, 1000]
。 - 每个节点的值都是 0。
解题思路
- 我们想要摄像头最少,那么就需要尽量往父节点装(装在父节点可以监视到两个子节点)
- 我们用
0
来表示没覆盖到的,1
表示覆盖到的,2
表示安装摄像头的位置 - 我们使用后续遍历
- 对父节点进行判断,如果节点安装了摄像头,首先数量
+1
,如果该节点的父节点存在且没被覆盖,则将其标为覆盖 - 如果该节点没被覆盖,我们先判断他有没有父节点,有的话将其父节点设为摄像头位,并将该节点标记为覆盖到
- 该节点为头结点,将其标记为摄像头位并数量
+1
解题代码
1 | var minCameraCover = function(root) { |
时间不会停下来等你,我们现在过的每一天,都是余生中最年轻的一天。
如有任何问题或建议,欢迎留言讨论!