题解 | #多叉树的直径#

多叉树的直径

https://www.nowcoder.com/practice/a77b4f3d84bf4a7891519ffee9376df3

/**
 * struct Interval {
 *	int start;
 *	int end;
 *	Interval(int s, int e) : start(start), end(e) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 树的直径
     * @param n int整型 树的节点个数
     * @param Tree_edge Interval类vector 树的边
     * @param Edge_value int整型vector 边的权值
     * @return int整型
     */
  // 邻接链表
    unordered_map<int,vector<pair<int,int>>> graph;
  // 访问数组,防止图遍历走回路
    vector<bool> visited;
    int res = 0;
    int target = -1;
  // 图遍历时,要记录前一个节点index,防止走回路
    void dfs(int cur, int from, int sum){
        visited[cur] = true;
        for(auto& edge : graph[cur]){
            int next = edge.first;
            int weight = edge.second;
            if(next == from || visited[next])   continue;
            dfs(next, cur, sum+weight);
        }
        if(sum > res){
            res = sum;
            target = cur;
        }
        visited[cur] = false;
        return;
    }
    int solve(int n, vector<Interval>& Tree_edge, vector<int>& Edge_value) {
        int m = Tree_edge.size();
        visited.resize(n);
	  // 无向图
        for(int i=0; i<m; ++i){
            int head = Tree_edge[i].start;
            int tail = Tree_edge[i].end;
            int weight = Edge_value[i];
            graph[head].emplace_back(pair{tail, weight});
            graph[tail].emplace_back(pair{head, weight});
        }
        dfs(0,-1,0);
        dfs(target, -1, 0);
        return res;
    }
};

全部评论

相关推荐

10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
11-24 00:11
已编辑
广东工业大学 算法工程师
避雷深圳&nbsp;&nbsp;yidao,试用期&nbsp;6&nbsp;个月。好嘛,试用期还没结束,就直接告诉你尽快找下一家吧,我谢谢您嘞
牛客75408465号:笑死,直属领导和 hr 口径都没统一,各自说了一些离谱的被裁理由,你们能不能认真一点呀,哈哈哈哈哈😅😅😅
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务