给定一棵多叉树,求出这棵树的直径,即树上最远两点的距离。
包含n个结点,n-1条边的连通图称为树。
示例1的树如下图所示。其中4到5之间的路径最长,是树的直径,距离为5+2+4=11
数据范围:
,保证最终结果满足
要求:空间复杂度:
,时间复杂度
# 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