• 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
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    100 numpy exercises
    IndentationError: unindent does not match any outer indentation level
    Git详解之七:自定义Git
    Git详解之六:Git工具
    Git详解之五:分布式Git
    Git详解之四:服务器上的Git
    Git详解之三:Git分支
    Git详解之二:Git基础
    Git详解之一:Git起步
    Jquery基础之事件操作
  • 原文地址:https://www.cnblogs.com/itdef/p/11785904.html
Copyright © 2020-2023  润新知