二叉树放置照相机 Binary Tree Cameras
2019-03-27 15:39:37
问题描述:



问题求解:
很有意思的问题,问题描述简单,求解过程也可以非常的简洁,是个难得的好题。
求解的过程是自底向上进行分析,对于叶子节点,如果在叶子上放置照相机,显然是没有在其parent上放置相机来的合适的,因为叶子节点的覆盖范围没有其parent节点大。
因此,我们就可以对所有的叶子的节点的parent进行放置相机,同时将所有已经覆盖掉的节点去除掉。
对于剩下的节点重复上述的操作即可。
这里在求解的时候并不需要真实的去删除节点,只要在每个节点上加上标注信息就可以了。
叶子节点 :1
放置照相机 :2
已经被cover节点 :3
public int minCameraCover(TreeNode root) {
int[] res = new int[1];
int state = helper(root, res);
if (state == 1) res[0]++;
return res[0];
}
// 1 : leaf
// 2 : camera
// 3 : covered
private int helper(TreeNode root, int[] res) {
if (root == null) return 3;
int l = helper(root.left, res);
int r = helper(root.right, res);
if (l == 3 && r == 3) return 1;
else if (l == 1 || r == 1) {
res[0]++;
return 2;
}
else return 3;
}
二叉树放置照相机 Binary Tree Cameras的更多相关文章
- 笔试算法题(41):线索二叉树(Threaded Binary Tree)
议题:线索二叉树(Threaded Binary Tree) 分析: 为除第一个节点外的每个节点添加一个指向其前驱节点的指针,为除最后一个节点外的每个节点添加一个指向其后续节点的指针,通过这些额外的指 ...
- leetcode 968. Binary Tree Cameras
968. Binary Tree Cameras 思路:如果子节点只能覆盖到父节点.当前节点,但是父节点可以覆盖到他的父节点.子节点.当前节点,所以从叶子节点往上考虑 0代表子节点没有被覆盖 1代表子 ...
- Leetcode之分治法专题-654. 最大二叉树(Maximum Binary Tree)
Leetcode之分治法专题-654. 最大二叉树(Maximum Binary Tree) 给定一个不含重复元素的整数数组.一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素. 左 ...
- [Swift]LeetCode968.监控二叉树 | Binary Tree Cameras
Given a binary tree, we install cameras on the nodes of the tree. Each camera at a node can monitor ...
- 【LeetCode】968. Binary Tree Cameras 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- [Swift]LeetCode563. 二叉树的坡度 | Binary Tree Tilt
Given a binary tree, return the tilt of the whole tree. The tilt of a tree node is defined as the ab ...
- (二叉树 BFS) leetcode102. Binary Tree Level Order Traversal
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- 剑指offer从上往下打印二叉树 、leetcode102. Binary Tree Level Order Traversal(即剑指把二叉树打印成多行、层序打印)、107. Binary Tree Level Order Traversal II 、103. Binary Tree Zigzag Level Order Traversal(剑指之字型打印)
从上往下打印二叉树这个是不分行的,用一个队列就可以实现 class Solution { public: vector<int> PrintFromTopToBottom(TreeNode ...
- 【构建二叉树】02根据中序和后序序列构造二叉树【Construct Binary Tree from Inorder and Postorder Traversal】
我们都知道,已知中序和后序的序列是可以唯一确定一个二叉树的. 初始化时候二叉树为:================== 中序遍历序列, ======O=========== 后序遍 ...
随机推荐
- JDBC事务(一)
package cn.sasa.tran01; import java.sql.Connection; import java.sql.DriverManager; import java.sql.P ...
- 网络视频播放ZFPlayer
根据项目需要,公司app需要用到视频播放功能,推荐ZFPlayer,视频播放几乎有你想要的任何样式,该博客只是为了给自己留一个以后查找的资料, 改代码可以使用ZFPlayer github地址 htt ...
- [vue]mvc模式和mvvm模式及vue学习思路(废弃)
好久不写东西了,感觉收生疏了, 学习使用以思路为主, 记录笔记为辅作用. v-if: http://www.cnblogs.com/iiiiiher/p/9025532.html v-show tem ...
- asp.net重要小知识
1.服务端用request获取值一般用的是name属性,而ID属性是获取不到值的.对于asp.net中服务器控件一般是把name属性封装的名字和ID相同.
- 赵丽颖固然漂亮,可这份Hadoop核心教程也不差呀
阿里巴巴采用了 15 个节点组成的 Hadoop 集群,用于处理从数据库中导出的商业数据的排序和组合. Ebay 使用了 32 个节点组成的集群,包括 8 532 个计算核心以及 5.3 PB 的存储 ...
- TP连接数据库报错:SQLSTATE[HY000] [2002] No such file or directory
连接数据库报错:“SQLSTATE[HY000] [2002] No such file or directory”. 出现这个问题的原因是PDO无法找到mysql.sock或者mysqld.soc ...
- 时间序列预测——Tensorflow.Keras.LSTM
1.测试数据下载 https://datamarket.com/data/set/22w6/portland-oregon-average-monthly-bus-ridership-100-janu ...
- npm 传入参数
你可以运行类似npm start 8080的代码,并且不需要去修改script.js或者配置文件: 例如,在你的"scripts"JSON值,包括-- "start&qu ...
- Python+OpenCV图像处理(十四)—— 直线检测
简介: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线 ...
- 02: OpenStack
1.1 OpenStack各组件 1.Horizon(控制台),又名Dashboard 就是web展示界面操作平台,方便用户交互的 2.Nova(计算) 负责创建,调度,销毁云主机 3.Neutron ...