1245. Tree Diameter

Question

CleanShot 2024-09-21 at 20.58.05.png

Code

class Solution:
    def treeDiameter(self, edges: List[List[int]]) -> int:

        if len(edges) == 0:
            return 0

        adj = defaultdict(list)

        for a, b in edges:
            adj[a].append(b)
            adj[b].append(a)


        start = edges[0][0]

        que = deque()
        que.append(start)

        visited = set()
        visited.add(start)

        while que:
            cur = que.popleft()
            start = cur

            for next in adj[cur]:
                if next in visited:
                    continue

                que.append(next)
                visited.add(next)

        

        def dfs(cur, seen):
            if cur in seen:
                return 0

            cur_max = 0
            seen.add(cur)

            for next in adj[cur]:
                cur_max = max(cur_max, dfs(next, seen))

            return cur_max + 1

        return dfs(start, set()) - 1