968:监控二叉树

This commit is contained in:
huangge1199 2021-10-19 15:18:20 +08:00
parent aeeae0b518
commit c8ddb46c9d
2 changed files with 120 additions and 0 deletions

View 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)
}

View File

@ -0,0 +1,34 @@
<p>给定一个二叉树,我们在树的节点上安装摄像头。</p>
<p>节点上的每个摄影头都可以监视<strong>其父对象、自身及其直接子对象。</strong></p>
<p>计算监控树的所有节点所需的最小摄像头数量。</p>
<p>&nbsp;</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>给定树的节点数的范围是&nbsp;<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>