from kata_181 import adjacency_list

def valid_tree(n, edges):
    if n == 0 or len(edges) != n - 1:
        return False
    adj = adjacency_list(n, edges)
    seen, stack = {0}, [0]
    while stack:
        u = stack.pop()
        for v in adj[u]:
            if v not in seen:
                seen.add(v)
                stack.append(v)
    return len(seen) == n
