public boolean validTree(int n, int[][] edges) {
        // Write your code here
        if (n == 0) {
            return false;
        }
        if (edges.length != n-1) return false;

        Map<Integer, Set<Integer>> graph = initailGraph(n, edges);

        Queue<Integer> q = new LinkedList<Integer>();
        HashSet<Integer> set = new HashSet<>();

        q.add(0);
        set.add(0);
        int visit = 0;

        while (!q.isEmpty()) {
            int tmp = q.poll();
            visit++;
            for (Integer neig : graph.get(tmp)) {
               if (set.contains(neig)) {
                  continue;
                }
               q.add(neig);
               set.add(neig);
            }
        }
        return visit == n;
    }
    public Map<Integer, Set<Integer>> initailGraph(int n, int[][] edges) {
        Map<Integer, Set<Integer>> graph = new HashMap<>();
        for (int i = 0; i < n; i++) {
            graph.put(i, new HashSet<Integer>());
        }
        for (int i = 0; i < edges.length; i++) {
            int u = edges[i][0];
            int v = edges[i][1];
            graph.get(u).add(v);
            graph.get(v).add(u);
        }
        return graph;
    }

results matching ""

    No results matching ""