给定n个从0到n-1标记的节点和一系列无向边(每个边是一对节点),请检查这些边是否形成有效树。
分析
可以将这个问题转换为从图形中查找循环。可以通过使用DFS(递归)或BFS(队列)来解决。
Java解决方案1-DFS
public boolean validTree(int n, int[][] edges) {
HashMap<Integer, ArrayList> map = new HashMap<Integer, ArrayList>();
for(int i=0; i<n; i++){
ArrayList list = new ArrayList();
map.put(i, list);
}
for(int[] edge: edges){
map.get(edge[0]).add(edge[1]);
map.get(edge[1]).add(edge[0]);
}
boolean[] visited = new boolean[n];
if(!helper(0, -1, map, visited))
return false;
for(boolean b: visited){
if(!b)
return false;
}
return true;}
public boolean helper(int curr, int parent,
HashMap<Integer, ArrayList> map, boolean[] visited){
if(visited[curr])
return false;
visited[curr] = true;
for(int i: ma