力扣labuladong——一刷day62

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • [一、力扣1245. 树的直径](#一、力扣1245. 树的直径)
  • [二、力扣968. 监控二叉树](#二、力扣968. 监控二叉树)
  • [三、力扣979. 在二叉树中分配硬币](#三、力扣979. 在二叉树中分配硬币)

前言


说过后序位置的特殊之处,后序位置可以接收到子树的信息,同时也可以通过函数参数接收到父节点传递的信息,这道题就可以比较完美地体现这一特点

一、力扣1245. 树的直径

java 复制代码
class Solution {
    int max = 0;
    Map<Integer,List<Integer>> map = new HashMap<>();
    HashSet<Integer> set = new HashSet<>();
    public int treeDiameter(int[][] edges) {
        if(edges.length == 0){
            return 0;
        }
        for(int[] e : edges){
            int a = e[0], b = e[1];
            if(!map.containsKey(a)){
                map.put(a,new ArrayList<>());
            }
            if(!map.containsKey(b)){
                map.put(b, new ArrayList<>());
            }
            map.get(a).add(b);
            map.get(b).add(a);
        }
        fun(edges[0][0]);
        return max;
    }
    public int fun(int root){
        if(set.contains(root)){
            return 0;
        }
        set.add(root);
        int first = 0, second = 0;
        for(int a : map.get(root)){
            int child = fun(a);
            if(child >= first){
                second = first;
                first = child;
            }else if(child > second){
                second = child;
            }
        }
        int cur = first + second;
        max = Math.max(max, cur);
        return first + 1;
    }
}

二、力扣968. 监控二叉树

java 复制代码
/**
 * 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 {
    int res = 0;
    public int minCameraCover(TreeNode root) {
        if(fun(root) == 0){
            res ++;
        }
        return res;
    }
    //0表示未覆盖
    //1表示安装摄像头
    //2表示已覆盖
    public int fun(TreeNode root){
        if(root == null){
            return 2;
        }
        int left = fun(root.left);
        int right = fun(root.right);
        if(left == 0 || right == 0){
            res ++;
            return 1;
        }
        if(left == 1 || right == 1){
            return 2;
        }
        if(left == 2 && right == 2){
            return 0;
        }
        return 0;
    }
}

三、力扣979. 在二叉树中分配硬币

java 复制代码
/**
 * 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 {
    int res = 0;
    public int distributeCoins(TreeNode root) {
        fun(root);
        return res;
    }
    public int fun(TreeNode root){
        if(root == null){
            return 0;
        }
        int left = fun(root.left);
        int right = fun(root.right);
        res += Math.abs(left) + Math.abs(right) + root.val - 1;
        return left + right + root.val - 1;
    }
}
相关推荐
吾日三省吾码10 分钟前
JVM 性能调优
java
LNTON羚通38 分钟前
摄像机视频分析软件下载LiteAIServer视频智能分析平台玩手机打电话检测算法技术的实现
算法·目标检测·音视频·监控·视频监控
弗拉唐1 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi772 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
少说多做3432 小时前
Android 不同情况下使用 runOnUiThread
android·java
知兀2 小时前
Java的方法、基本和引用数据类型
java·笔记·黑马程序员
哭泣的眼泪4082 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
清炒孔心菜2 小时前
每日一题 LCR 078. 合并 K 个升序链表
leetcode
蓝黑20202 小时前
IntelliJ IDEA常用快捷键
java·ide·intellij-idea