给定一棵多叉树,求出这棵树的直径,即树上最远两点的距离。
包含n个结点,n-1条边的连通图称为树。
示例1的树如下图所示。其中4到5之间的路径最长,是树的直径,距离为5+2+4=11
数据范围:
,保证最终结果满足
要求:空间复杂度:
,时间复杂度
6,[[0,1],[1,5],[1,2],[2,3],[2,4]],[3,4,2,1,5]
11
2,[[0,1],[1,2]],[1]
1
# class Interval: # def __init__(self, a=0, b=0): # self.start = a # self.end = b # # 树的直径 # @param n int整型 树的节点个数 # @param Tree_edge Interval类一维数组 树的边 # @param Edge_value int整型一维数组 边的权值 # @return int整型 # from collections import defaultdict class Solution: def solve(self , n , Tree_edge , Edge_value ): # write code here graph, table = {}, defaultdict() for i in range(len(Tree_edge)): graph.setdefault(Tree_edge[i].start, []).append(Tree_edge[i].end), graph.setdefault(Tree_edge[i].end, []).append(Tree_edge[i].start) table[(Tree_edge[i].start, Tree_edge[i].end)], table[(Tree_edge[i].end, Tree_edge[i].start)] = Edge_value[i], Edge_value[i] self.res, self.maxIndex = 0, -1 def dfs(cnt, node, parent): cur = graph[node] for i in range(len(cur)): if cur[i] == parent: continue dfs(cnt+table[(node,cur[i])], cur[i], node) if cnt > self.res: self.res = cnt self.maxIndex = node dfs(0, 0, -1) dfs(0, self.maxIndex, -1) return self.res