1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Solution { private int count = 0;
public boolean validTree(int n, int[][] edges) { if (edges.length != n - 1) return false; if (edges.length == 0) return true; Map<Integer, List<Integer>> nodeMap = new HashMap<>(); boolean[] visited = new boolean[n]; for (int[] edge : edges) { nodeMap.putIfAbsent(edge[0], new ArrayList<>()); nodeMap.get(edge[0]).add(edge[1]); nodeMap.putIfAbsent(edge[1], new ArrayList<>()); nodeMap.get(edge[1]).add(edge[0]); } return helper(nodeMap, visited, edges[0][0], edges[0][0]) && count == n; }
private boolean helper(Map<Integer, List<Integer>> nodeMap, boolean[] visited, int currNode, int prevNode) { if (visited[currNode]) return false; visited[currNode] = true; count += 1; for (Integer node : nodeMap.get(currNode)) { if (node != prevNode && !helper(nodeMap, visited, node, currNode)) return false; } return true; } }
|