答案:
class Solution {
public int minReorder(int n, int[][] connections) {
List<List<Integer>> g = new ArrayList<>();
List<List<Integer>> G = new ArrayList<>();
for (int i = 0; i < n; i++) {
g.add(new ArrayList<>());
G.add(new ArrayList<>());
}
for (int[] connection : connections) {
int x = connection[0];
int y = connection[1];
g.get(x).add(y);
G.get(y).add(x);
}
return dfs(0, -1, g, G);
}
private int dfs(int u, int fa, List<List<Integer>> g, List<List<Integer>> G) {
int num = 0;
for (int x : g.get(u)) {
if (x != fa) {
num += 1 + dfs(x, u, g, G);
}
}
for (int x : G.get(u)) {
if (x != fa) {
num += dfs(x, u, g, G);
}
}
return num;
}
}
补充:
用List<List<Integer>> graph结构存放图结构 graph.get(i)存放i个节点指向的节点