LeetCode 261: Graph Valid Tree

link

A tree has barely enough edges to remain connected. So, with n nodes there must be (n-1) edges and all nodes must belong to a single connected component. We use DFS for the connected component part.

Time: \mathcal{O}(n), space: \mathcal{O}(n)

class Solution:
    def get_adj_list(self, n, edges) -> Dict[int, Set[int]]:
        adj_list = {u: set() for u in range(n)}
        for u, v in edges:
            adj_list[u].add(v)
            adj_list[v].add(u)
        return adj_list

    def explore(self, u, adj_list, visited):
        visited.add(u)
        for v in adj_list[u]:
            if v in visited:
                continue
            self.explore(v, adj_list, visited)

    def validTree(self, n: int, edges: List[List[int]]) -> bool:
        if len(edges) != n-1:
            return False
        adj_list = self.get_adj_list(n, edges)
        visited = set()
        self.explore(0, adj_list, visited)
        return len(visited) == n

Leave a comment