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 32 33 34 35 36 37
| class Solution { public List<List<Integer>> getAncestors(int n, int[][] edges) { List<List<Integer>> resultList = new ArrayList<>(); List<List<Integer>> edgeList = new ArrayList<>(n); for (int i = 0; i < n; i++) { resultList.add(new ArrayList<>()); edgeList.add(new ArrayList<>()); }
for (int[] edge : edges) { int from = edge[0], to = edge[1]; edgeList.get(from).add(to); }
int[] visited = new int[n]; Arrays.fill(visited, -1); for (int i = 0; i < n; i++) { dfs(resultList, edgeList, visited, i, i); }
return resultList; }
private void dfs(List<List<Integer>> resultList, List<List<Integer>> edgeList, int[] visited, int from, int ancestor) { visited[from] = ancestor;
for (int to : edgeList.get(from)) { if (visited[to] == ancestor) { continue; }
resultList.get(to).add(ancestor); dfs(resultList, edgeList, visited, to, ancestor); } } }
|