968:监控二叉树
This commit is contained in:
parent
aeeae0b518
commit
c8ddb46c9d
86
src/main/java/leetcode/editor/cn/BinaryTreeCameras.java
Normal file
86
src/main/java/leetcode/editor/cn/BinaryTreeCameras.java
Normal file
@ -0,0 +1,86 @@
|
||||
//给定一个二叉树,我们在树的节点上安装摄像头。
|
||||
//
|
||||
// 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。
|
||||
//
|
||||
// 计算监控树的所有节点所需的最小摄像头数量。
|
||||
//
|
||||
//
|
||||
//
|
||||
// 示例 1:
|
||||
//
|
||||
//
|
||||
//
|
||||
// 输入:[0,0,null,0,0]
|
||||
//输出:1
|
||||
//解释:如图所示,一台摄像头足以监控所有节点。
|
||||
//
|
||||
//
|
||||
// 示例 2:
|
||||
//
|
||||
//
|
||||
//
|
||||
// 输入:[0,0,null,0,null,0,null,null,0]
|
||||
//输出:2
|
||||
//解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。
|
||||
//
|
||||
//
|
||||
//
|
||||
//提示:
|
||||
//
|
||||
//
|
||||
// 给定树的节点数的范围是 [1, 1000]。
|
||||
// 每个节点的值都是 0。
|
||||
//
|
||||
// Related Topics 树 深度优先搜索 动态规划 二叉树 👍 330 👎 0
|
||||
|
||||
package leetcode.editor.cn;
|
||||
|
||||
import com.code.leet.entiy.TreeNode;
|
||||
|
||||
//968:监控二叉树
|
||||
class BinaryTreeCameras {
|
||||
public static void main(String[] args) {
|
||||
//测试代码
|
||||
Solution solution = new BinaryTreeCameras().new Solution();
|
||||
}
|
||||
|
||||
//力扣代码
|
||||
//leetcode submit region begin(Prohibit modification and deletion)
|
||||
|
||||
/**
|
||||
* Definition for a binary tree node.
|
||||
* public class TreeNode {
|
||||
* int val;
|
||||
* TreeNode left;
|
||||
* TreeNode right;
|
||||
* TreeNode() {}
|
||||
* TreeNode(int val) { this.val = val; }
|
||||
* TreeNode(int val, TreeNode left, TreeNode right) {
|
||||
* this.val = val;
|
||||
* this.left = left;
|
||||
* this.right = right;
|
||||
* }
|
||||
* }
|
||||
*/
|
||||
class Solution {
|
||||
public int minCameraCover(TreeNode root) {
|
||||
int[] array = dfs(root);
|
||||
return array[1];
|
||||
}
|
||||
|
||||
public int[] dfs(TreeNode root) {
|
||||
if (root == null) {
|
||||
return new int[]{Integer.MAX_VALUE / 2, 0, 0};
|
||||
}
|
||||
int[] leftArray = dfs(root.left);
|
||||
int[] rightArray = dfs(root.right);
|
||||
int[] array = new int[3];
|
||||
array[0] = leftArray[2] + rightArray[2] + 1;
|
||||
array[1] = Math.min(array[0], Math.min(leftArray[0] + rightArray[1], rightArray[0] + leftArray[1]));
|
||||
array[2] = Math.min(array[0], leftArray[1] + rightArray[1]);
|
||||
return array;
|
||||
}
|
||||
}
|
||||
//leetcode submit region end(Prohibit modification and deletion)
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
<p>给定一个二叉树,我们在树的节点上安装摄像头。</p>
|
||||
|
||||
<p>节点上的每个摄影头都可以监视<strong>其父对象、自身及其直接子对象。</strong></p>
|
||||
|
||||
<p>计算监控树的所有节点所需的最小摄像头数量。</p>
|
||||
|
||||
<p> </p>
|
||||
|
||||
<p><strong>示例 1:</strong></p>
|
||||
|
||||
<p><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/29/bst_cameras_01.png" style="height: 163px; width: 138px;"></p>
|
||||
|
||||
<pre><strong>输入:</strong>[0,0,null,0,0]
|
||||
<strong>输出:</strong>1
|
||||
<strong>解释:</strong>如图所示,一台摄像头足以监控所有节点。
|
||||
</pre>
|
||||
|
||||
<p><strong>示例 2:</strong></p>
|
||||
|
||||
<p><img alt="" src="https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2018/12/29/bst_cameras_02.png" style="height: 312px; width: 139px;"></p>
|
||||
|
||||
<pre><strong>输入:</strong>[0,0,null,0,null,0,null,null,0]
|
||||
<strong>输出:</strong>2
|
||||
<strong>解释:</strong>需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。
|
||||
</pre>
|
||||
|
||||
<p><br>
|
||||
<strong>提示:</strong></p>
|
||||
|
||||
<ol>
|
||||
<li>给定树的节点数的范围是 <code>[1, 1000]</code>。</li>
|
||||
<li>每个节点的值都是 0。</li>
|
||||
</ol>
|
||||
<div><div>Related Topics</div><div><li>树</li><li>深度优先搜索</li><li>动态规划</li><li>二叉树</li></div></div><br><div><li>👍 330</li><li>👎 0</li></div>
|
Loading…
Reference in New Issue
Block a user