class Solution:
def treeDiameter(self, edges: List[List[int]]) -> int:
G=collections.defaultdict(list)
for u,v in edges:
G[u].append(v)
G[v].append(u)
memo = {} # 缓存
def dfs(u,v):
if (u,v) in memo:
return memo[u,v]
now = 0
for w in G[v]:
if w == u: continue # 避免重复访问
now = max(now, dfs(v, w))
memo[u,v] = now + 1
return memo[u,v]
for u, v in edges:
dfs(u,v)
dfs(v,u)
return max(memo[u,v] + memo[v,u] - 1 for u,v in edges)