Leetcode: 2277. Closest Node to Path in Tree

Problem Statement

from typing import List


class Solution:
    def closestNode(
        self, n: int, edges: List[List[int]], query: List[List[int]]
    ) -> List[int]:
        A = defaultdict(list)
        for u, v in edges:
            A[u].append(v)
            A[v].append(u)

        def dfs(root, parent, e1, e2):
            if root == e1 or root == e2:
                return root
            found = []
            for u in A[root]:
                if u != parent:
                    v = dfs(u, root, e1, e2)
                    if v is not None:
                        found.append(v)
            if found:
                return found[0] if len(found) == 1 else root
            return None

        return [dfs(q, None, u, v) for u, v, q in query]


assert Solution().closestNode(
    7, [[0, 1], [0, 2], [0, 3], [1, 4], [2, 5], [2, 6]], [[5, 3, 4], [5, 3, 6]]
) == [0, 2]
assert Solution().closestNode(3, [[0, 1], [1, 2]], [[0, 1, 2]]) == [1]
assert Solution().closestNode(3, [[0, 1], [1, 2]], [[0, 0, 0]]) == [0]