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

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 }

转载于:https://www.cnblogs.com/strengthen/p/10201562.html

[Swift]LeetCode968.监控二叉树 | Binary Tree Cameras相关推荐

  1. 【数据结构】二叉树 (Binary Tree)

    目录 一. 什么是树? 二. 二叉树 特殊二叉树 二叉树的性质 二叉树的存储 二叉树的遍历 二叉树的基本操作 一.什么是树? 之前咱们学习了一些简单的数据结构,如顺序表,链表,这些都是线性结构,线性结 ...

  2. 二叉树 Binary Tree

    我怀着激动的心 走上了这颗树 今天是2021年11月12日 今天开始上树!!!!!! 生活中的树形结构: 树:  根节点: 一棵树有且只有一个根节点就是最上面的节点 兄弟节点: 每一行的节点  它们具 ...

  3. 『数据结构与算法』解读树(Tree)和二叉树(Binary Tree)!

    『数据结构与算法』解读树(Tree)和二叉树(Binary Tree)! 文章目录 一. 树 1.1. 树的定义 1.2. 树的基本术语 1.3. 树的性质 二. 二叉树 2.1. 二叉树的定义 2. ...

  4. leetcode968. 监控二叉树(dfs)

    给定一个二叉树,我们在树的节点上安装摄像头. 节点上的每个摄影头都可以监视其父对象.自身及其直接子对象. 计算监控树的所有节点所需的最小摄像头数量. 输入:[0,0,null,0,0] 输出:1 解释 ...

  5. 由任意二叉树的前序遍历序列和中序遍历序列求二叉树的思想方法_算法与数据结构基础 - 二叉树(Binary Tree)...

    二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...

  6. c++ 结构体遍历_二叉树(Binary Tree)的建立与遍历——C语言实现

    一.运行环境简介 编辑器:VSCode + MicroSoft原生插件; :cat:‍:dragon:运行环境: MinGW ; :cat:‍:bust_in_silhouette:常用指令: gcc ...

  7. leetcode968. 监控二叉树

    一:论语 这个有意思,我们可以从中得出的是,一个人过错 其实是潜意思决定的 行为见品质 但知错更改也是nice的 二:题目 三:上码 /*** Definition for a binary tree ...

  8. 968. Binary Tree Cameras 监控二叉树

    给定一个二叉树,我们在树的节点上安装摄像头. 节点上的每个摄影头都可以监视其父对象.自身及其直接子对象. 计算监控树的所有节点所需的最小摄像头数量. 示例 1: 输入:[0,0,null,0,0] 输 ...

  9. 数据结构--二叉树 Binary Tree

    文章目录 1.概念 2.存储方式 2.1 链式存储(二叉树代码大部分是链式实现的) 2.2 顺序存储(基于数组) 3.二叉树的遍历 3.1 基于链表的二叉树实现代码 3.2 基于数组的二叉树实现代码 ...

最新文章

  1. 搜索引擎:文本分类——TF/IDF算法
  2. XMPP协议学习笔记三(Openfire服务器端搭建开发环境)
  3. TypeScript - 不止稳,而且快
  4. go语言连接redis(已测试)
  5. mysql单表备份语句
  6. 编写干净的测试–验证或不验证
  7. python 数组赋值_pythonamp;numpy的赋值
  8. laravel字符截断
  9. MySQL指令集集合
  10. 在线网络投票/打分活动实施步骤及疑难问题汇编
  11. Centos7二进制安装Mysql8.0.20
  12. 0603封装继承多态,综合练习
  13. mysql数据库安装过程蜿蜒曲折
  14. QT for Android 修改图标与名称
  15. Linux 鼠标可以移动但是无法点击。
  16. 【脚本】自动统计B站up主投稿视频时长
  17. [256个管理学理论]004.鲶鱼效应(Catfish Effect)
  18. springboot-No7 加入异常拦截机制ExceptionHandler
  19. npm全局安装失败,报-4048错误(npm ERR code EPERMnpm ERR syscall mkdirnpm ERR path C:\…)
  20. 数车加工表面质量差?看懂这个8个公式让你和“它”说拜拜

热门文章

  1. Java API 文档中的接口方法和抽象方法,有什么区别?
  2. 全连接层 时间复杂度_神经网络全连接层(3)
  3. 图书管理系统python语言-Python简易版图书管理系统
  4. Leetcode 146. LRU 缓存机制
  5. LeetCode 66 加一
  6. mysql 8.0用doc修改密码_MYSQL8.0修改密码流程
  7. php 浏览器 打印控件,JavaScript_JavaScript 实现打印,打印预览,打印设置,WebBrowser是IE内置的浏览器控件 - phpStudy...
  8. python 用while输出数字金字塔_用Python实现一个Dual Thrust数字货币量化交易策略
  9. 鸿蒙系统多会发布,华为官宣鸿蒙系统将发布,还将发布多款新品
  10. oracle创建数据库用户并授权,oracle创建数据库、表空间、用户并授权