LeetCode 1245 树的直径

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

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

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

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

示例1

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

示例2

输入:edges = [[0,1],[1,2],[2,3],[1,4],[4,5]]
输出:4
解释: 
这棵树上最长的路径是 3 - 2 - 1 - 4 - 5,边数为 4

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

C++ 代码

复制代码
 1 class Solution {
 2 public:
 3     pair<int, int> bfs(vector<vector<int>>& e, int start) {
 4         vector<int> d(e.size(), -1);
 5 
 6         queue<int> Q;
 7         Q.push(start);
 8         d[start] = 0;
 9 
10         pair<int, int> ret;
11 
12         while (!Q.empty()) {
13             int x = Q.front();
14             Q.pop();
15             ret.first = x;
16             ret.second = d[x];
17             for (auto& y : e[x]) {
18                 if (d[y] == -1) {
19                     d[y] = d[x] + 1;
20                     Q.push(y);
21                 }
22             }
23         }
24         return ret;
25     }
26 
27     int treeDiameter(vector<vector<int>>& edges) {
28         int n = edges.size() + 1;
29         vector<vector<int>> e(n, vector<int>());
30         for (auto& edge: edges) {
31             e[edge[0]].push_back(edge[1]);
32             e[edge[1]].push_back(edge[0]);
33         }
34 
35         pair<int, int> p;
36         p = bfs(e, 0);
37         p = bfs(e, p.first);
38 
39         return p.second;
40     }
41 };
View Code
复制代码

 

posted on   itdef  阅读(944)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示