图-多叉树的直径(hard)

news2024/11/26 6:25:15

目录

一、问题描述

二、解题思路

1.存储结构

2.算法描述

三、代码实现

四、刷题链接

五、参考


一、问题描述

二、解题思路

1.存储结构

        使用邻接表结构来存储无向图,边结点存储结构为[终点,边长(也就是权重)]

2.算法描述

        从某一个结点(任意一个即可)开始进入递归,通过递归找到当前结点所能到达的最远结点(路径长度最长)。

        然后再从确定的最远结点开始进入递归,寻找距离这个最远结点最远的结点,这两个结点之间的距离就是最大的路径权值和,也就是题意里面要求的半径长度。

三、代码实现

import java.util.*;

/*
 * public class Interval {
 *   int start;
 *   int end;
 * }
 */

public class Solution {
    /**
     * 树的直径
     * @param n int整型 树的节点个数
     * @param Tree_edge Interval类一维数组 树的边
     * @param Edge_value int整型一维数组 边的权值
     * @return int整型
     */
    //邻接表
    List<List<int[]>> graph;
    //记录最远节点
    long far = 0;
    //记录无重复最长路径,即树的直径
    long max = 0;

    public int solve (int n, Interval[] Tree_edge, int[] Edge_value) {
        //初始化邻接表
        graph = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            graph.add(new ArrayList<>());
        }

        //以边的起点为索引,将对应的边的终点以及边的权值放在list里
        for (int i = 0; i < Tree_edge.length; i++) {
            graph.get(Tree_edge[i].start).add(new int[] {Tree_edge[i].end, Edge_value[i]});
            graph.get(Tree_edge[i].end).add(new int[] {Tree_edge[i].start, Edge_value[i]});
        }

        //从0号节点开始递归
        dfs(0, -1, 0);
        max = 0;
        //找到最远点后,从当前点递归
        dfs(far, -1, 0);
        return (int)max;
    }

    //深度优先搜索
    private void dfs(long cur, long pre, long dist) {
        //跟新当前最长路径以及最远点
        if (dist > max) {
            max = dist;
            far = cur;
        }
        for (int[] child : graph.get((int)cur)) {
            //如果没有走回头路,则沿子节点方向递归
            if (child[0] != (int)pre) {
                dfs(child[0], cur, dist + child[1]);
            }
        }
    }
}

四、刷题链接

多叉树的直径_牛客题霸_牛客网

五、参考

牛客网@xqxls的题解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1835220.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32开发过程中碰到的问题总结 - 3

文章目录 前言1. keil5升级到最新版本使用armV6编译工具链编译不通过2. 最新的keil用Jlink调试失败3. 移动了目录后跑不起来了4. 串口兼容了GNU 和arm只会&#xff0c;编译出来的成果物&#xff0c;串口输出不正常5.STM32下哪些IO口可以作为中断触发去使用6. 触发GPIO10的外部中…

Python机器学习完整流程:从数据清洗到推理落地

目录 一、引言 二、数据清洗 数据加载与初步探索 缺失值处理 异常值处理 特征编码与转换 数据集划分 三、模型训练 四、模型文件生成 五、模型部署与推理落地 六、总结 一、引言 在当今数据驱动的时代&#xff0c;机器学习已成为解决复杂问题的有力工具。而…

Django期末重点

思维导图 一、Djanog框架基础 MVT设计模式&#xff08;model模型【操作数据库】、template模板【页面展示】、view视图【处理请求和调用模型模板】&#xff09; 二、Django项目框架搭建 创建项目骨架 django-admin startproject 项目名启动服务 &#xff08;1&#xff09;p…

Eigne库安装及使用教程

文章目录 1.Eigne库介绍2.Eigne库安装3.Eigne库使用4.some examples5.参考文献 1.Eigne库介绍 Eigen是可以用来进行线性代数、矩阵、向量操作等运算的C库&#xff0c;它里面包含了很多算法。它的License是MPL2。它支持多平台。 Eigen采用源码的方式提供给用户使用&#xff0c;在…

赛氪网荣膺“创新型中小企业”称号,科技创新再显卓越实力

近日&#xff0c;北京市经济和信息化局揭晓了2024年度3月份北京市创新型中小企业的光荣名单&#xff0c;其中北京环球赛乐科技有限公司&#xff08;简称赛氪网&#xff09;脱颖而出&#xff0c;再度展现其在创新领域的卓越实力&#xff01; 作为早已跻身“高企之光”行列的佼佼…

【x264】滤波模块的简单分析

【x264】滤波模块的简单分析 1. 滤波模块概述1.1 自适应边界1.2 自适应样点级滤波器1.3 滤波过程 2. 函数入口&#xff08;fdec_filter_row&#xff09;2.1 去块滤波&#xff08;x264_frame_deblock_row&#xff09;2.1.1 强滤波函数&#xff08;deblock_edge_intra&#xff09…

Ubuntu20.04-ROS:Noetic安装

根据Ubuntu系统来选择对应的ros版本&#xff0c;在Ubuntu20.04上安装ROS-Noetic为例说明下如何安装ros 一 设置ROS源 / 终端输入 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.lis…

语言大模型:开启自然语言处理的新篇章

随着人工智能技术的飞速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域取得了显著的成果。其中&#xff0c;语言大模型&#xff08;Language Models&#xff09;作为近年来崛起的一种新型神经网络模型&#xff0c;已经在文本生成、机器翻译、情感分析等多个NLP任…

计算机专业毕设-校园二手交易平台

1 项目介绍 基于SpringBoot的校园二手交易平台&#xff1a;前端Freemarker&#xff0c;后端 SpringBoot、Jpa&#xff0c;系统用户分为两类&#xff0c;管理员、学生&#xff0c;具体功能如下&#xff1a; 管理员&#xff1a; 基本功能&#xff1a;登录、修改个人信息、修改…

Web应用安全测试-综合利用(三)

Web应用安全测试-综合利用&#xff08;三&#xff09; XML注入 漏洞描述 可扩展标记语言 (Extensible Markup Language, XML) &#xff0c;用于标记电子文件使其具有结构性的标记语言&#xff0c;可以用来标记数据、定义数据类型&#xff0c;是一种允许用户对自己的标记语言进…

内行人说真话,家用空气净化器对灰尘、毛絮的作用到底如何?

在日常生活中&#xff0c;打扫房间常常令人头疼&#xff0c;尤其是地面和家具上那些似乎永远清理不完的浮灰和毛絮。有时候&#xff0c;即使我们用吸尘器、扫地机器人等不断清扫&#xff0c;灰尘和毛絮仍旧存在。特别对于养宠物的家庭来说&#xff0c;清洁工作更是一项挑战&…

gitlab 身份验证手机号验证没86

处理方案 在浏览器中摁 【F12】打开控制台&#xff0c;选择网络模块&#xff0c;找到手机号列表的请求&#xff0c;请求是 https://gitlab.com/-/countries&#xff0c;右击数据区域点击【替换内容】如下&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/di…

三分钟了解链动3+1模式

在电商领域的营销策略中&#xff0c;链动31模式以其独特的魅力和优势&#xff0c;吸引了众多商家的目光。下面&#xff0c;我们将对这一模式进行深度剖析&#xff0c;并探讨其相较于链动21模式的优势所在。 一、身份设置与奖励机制 链动31模式在身份设置上分为三种&#xff1…

【React】Table表头纵向展示

默认表格展示&#xff1a; 展示目标&#xff1a; 环境 antd: ^5.14.1react: ^18 拟定数据 - columns const columns [{title: "品牌",dataIndex: "brand",key: "brand",width: 100,},{title: "Star",dataIndex: "star&quo…

VS C++常用错误与解决方法

无法找到 v143 的生成工具(平台工具集 “v143”) 若要使用 v143 生成工具进行生成&#xff0c;请安装 v143 生成工具。或者&#xff0c;可以升级到当前 Visual Studio 工具&#xff0c;方式是通过选择“项目”菜单或右键单击该解决方案&#xff0c;然后选择“重定解决方案目标…

HarmonyOS 开发知识:一个基于 emitter 封装了一个便捷的 EventBus 事件通知

引言 鸿蒙提供提供了在同一进程不同线程间&#xff0c;或同一进程同一线程内&#xff0c;发送和处理事件的能力&#xff0c;包括持续订阅事件、单次订阅事件、取消订阅事件&#xff0c;以及发送事件到事件队列的能力。 ohos.events.emitter Emitter 封装前使用&#xff1a;e…

红黑树插入数据的底层详解

红黑树定义 1. 每个结点不是红色就是黑色 2. 根节点是黑色的 3. 如果一个节点是红色的&#xff0c;则它的两个孩子结点是黑色的 4. 对于每个结点&#xff0c;从该结点到其所有后代叶结点的简单路径上&#xff0c;均 包含相同数目的黑色节点 5. 每个叶子结点都是黑色的(此…

c语言---循环 、判断基础知识详解

if语句 else离最近的if语句结合。 if语句题目 //1. 判断一个数是否为奇数 //2. 输出1 - 100之间的奇数 #include <stdio.h> int main() {int n 0;scanf("%d", &n);if (n % 2){printf("奇数\n");}else{printf("不是奇数\n"…

LeetCode 2813.子序列最大优雅度

给你一个长度为 n 的二维整数数组 items 和一个整数 k 。 items[i] [profiti, categoryi]&#xff0c;其中 profiti 和 categoryi 分别表示第 i 个项目的利润和类别。 现定义 items 的 子序列 的 优雅度 可以用 total_profit distinct_categories^2 计算&#xff0c;其中 t…

VScode如何调试

调试 1.打断点 1.点击调试按钮 3.点击下拉选择环境node&#xff0c;点击绿三角选择输入调试的命令&#xff08;具体命令查看package.json中scripts中的哪一个命令和运行的文件&#xff09;&#xff0c;点击右边的设置&#xff08;可以直接跳下面第八步&#xff01;&#xff…