[Swift]LeetCode968.監控二叉樹 | Binary Tree Cameras

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-ytdyuchi-me.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

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

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

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

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:spa

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:code

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

給定一個二叉樹,咱們在樹的節點上安裝攝像頭。htm

節點上的每一個攝影頭均可以監視其父對象、自身及其直接子對象。對象

計算監控樹的全部節點所需的最小攝像頭數量。blog

 

示例 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 }
相關文章
相關標籤/搜索