地址 https://leetcode-cn.com/contest/biweekly-contest-12/problems/tree-diameter/

给你这棵「无向树」,请你测算并返回它的「直径」:这棵树上最长简单路径的 边数。

我们用一个由所有「边」组成的数组 edges 来表示一棵无向树,其中 edges[i] = [u, v] 表示节点 u 和 v 之间的双向边。

树上的节点都已经用 {0, 1, ..., edges.length} 中的数做了标记,每个节点上的标记都是独一无二的。

示例1

输入:edges = [[,],[,]]
输出:
解释:
这棵树上最长的路径是 - - ,边数为 。

示例2

输入:edges = [[,],[,],[,],[,],[,]]
输出:
解释:
这棵树上最长的路径是 - - - - ,边数为 。

算法1
求无向树最远距离 分为两步
1 任选一点 BFS或者DFS获取离该点最远的点
2 以第一步得到的点为起点 再次BFS或者DFS获取距离最远的点。两者距离就是最远距离

C++ 代码

 class Solution {
public:
pair<int, int> bfs(vector<vector<int>>& e, int start) {
vector<int> d(e.size(), -); queue<int> Q;
Q.push(start);
d[start] = ; pair<int, int> ret; while (!Q.empty()) {
int x = Q.front();
Q.pop();
ret.first = x;
ret.second = d[x];
for (auto& y : e[x]) {
if (d[y] == -) {
d[y] = d[x] + ;
Q.push(y);
}
}
}
return ret;
} int treeDiameter(vector<vector<int>>& edges) {
int n = edges.size() + ;
vector<vector<int>> e(n, vector<int>());
for (auto& edge: edges) {
e[edge[]].push_back(edge[]);
e[edge[]].push_back(edge[]);
} pair<int, int> p;
p = bfs(e, );
p = bfs(e, p.first); return p.second;
}
};

最新文章

  1. PHP练习题
  2. DataGridView回车焦点横向移动
  3. mysql full text全文索引必要条件
  4. php解压 tar.gz 格式文件
  5. I.MX6 Android USB Touch eGTouchA.ini文件存放
  6. VB.Net中点击按钮(Button)会重复提交两次表单
  7. 易语言转C#小试牛刀
  8. Python开发环境Wing IDE使用教程:部分调试功能介绍
  9. botzone Tetris2
  10. 阶段小项目2:显示bin格式图片
  11. UmengShareDemo【友盟分享SDK集成,基于V6.9.3版本】
  12. Delphi Create(nil), Create(self), Create(Application)的区别
  13. 《贝贝GO》技术支持
  14. 一台电脑支持2个git账号:gitlab+github
  15. mysql主从脚本
  16. Linux-Centos7 安装图形界面
  17. 图片的Base64编码
  18. [dpdk] dpdk --lcores参数
  19. Java设计模式(9)适配器模式(Adapter模式)
  20. BZOJ1597: [Usaco2008 Mar]土地购买(dp 斜率优化)

热门文章

  1. Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案
  2. JDK 安装与环境配置配置——Android开发第一步
  3. 【Objective-C】Objective-C语言的动态性
  4. 分析Android APK-砸壳-Fdex2
  5. Windows相关操作(备忘)
  6. Mac环境安装非APP STORE中下载的软件,运行报错:“XXX” is damaged and can’t be opened. You should move it to the Trash. 解决办法
  7. Metasploit从文件中读取目标地址
  8. 自己开发的网站压力测试(阿里云1M带宽)
  9. Linux之自动化部署
  10. 通过SSH隧道的本地转发实现Django连接远程数据库