为有牺牲多壮志,敢教日月换新天。

[Swift]LeetCode968.监控二叉树 | Binary Tree Cameras

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10201562.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

热烈欢迎,请直接点击!!!

进入博主App Store主页,下载使用各个作品!!!

注:博主将坚持每月上线一个新app!!!

Given a binary tree, we install cameras on the nodes of the tree. 

Each camera at a node can monitor its parent, itself, and its immediate children.

Calculate the minimum number of cameras needed to monitor all nodes of the tree.

Example 1:

Input: [0,0,null,0,0]
Output: 1
Explanation: One camera is enough to monitor all nodes if placed as shown.

Example 2:

Input: [0,0,null,0,null,0,null,null,0]
Output: 2
Explanation: At least two cameras are needed to monitor all nodes of the tree. The above image shows one of the valid configurations of camera placement.

Note:

  1. The number of nodes in the given tree will be in the range [1, 1000].
  2. Every node has value 0.

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

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

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

 

示例 1:

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

示例 2:

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


提示:

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

 52ms

 1 /**
 2  * Definition for a binary tree node.
 3  * public class TreeNode {
 4  *     public var val: Int
 5  *     public var left: TreeNode?
 6  *     public var right: TreeNode?
 7  *     public init(_ val: Int) {
 8  *         self.val = val
 9  *         self.left = nil
10  *         self.right = nil
11  *     }
12  * }
13  */
14 class Solution {
15     func minCameraCover(_ root: TreeNode?) -> Int {
16         var ans:[Int] = mh(root)
17         return min(ans[1], ans[2])
18     }
19     
20     func mh(_ ro:TreeNode?)-> [Int]
21     {
22         if ro == nil
23         {
24             var ans:[Int] = [Int](repeating:0,count:3)
25             ans[1] = 1000000
26             return ans
27         }
28         var l:[Int] = mh(ro!.left)
29         var r:[Int] = mh(ro!.right)
30         var ans:[Int] = [Int](repeating:0,count:3)
31         ans[0] = l[2] + r[2];
32         ans[1] = 1000000;
33         ans[2] = 1000000;
34         for i in 0..<3
35         {
36             for j in 0..<3
37             {
38                 ans[1] = min(ans[1], l[i]+r[j]+1)
39             }
40             if i==0 {continue}
41             ans[2] = min(ans[2], l[1]+r[i])
42             ans[2] = min(ans[2], l[i]+r[1])
43         }
44         return ans
45     }
46 }

 

 
posted @ 2018-12-31 10:47  为敢技术  阅读(891)  评论(0编辑  收藏  举报