Graph Valid Tree
Description
Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), write a function to check whether these edges make up a valid tree.
public class Solution {
/**
* @param n: An integer
* @param edges: a list of undirected edges
* @return: true if it's a valid tree, or false
*/
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 = getGraph(n , edges);
Queue<Integer> queue = new LinkedList<Integer>();
HashSet<Integer> set = new HashSet<Integer>();
queue.offer(0) ;
set.add(0);
while(! queue.isEmpty()){
int node = queue.poll() ;
for(Integer neighbor : graph.get(node)){
if(set.contains(neighbor)){
continue ;
}
queue.offer(neighbor);
set.add(neighbor);
}
}
return (set.size() == n) ;
}
public Map<Integer, Set<Integer>> getGraph(int n, int[][] edges){
Map<Integer, Set<Integer>> graph = new HashMap<Integer, Set<Integer>>();
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 ;
}
}
该博客探讨了一个算法问题,即如何检查给定的无向边是否组成一棵有效的树。解决方案中,首先检查节点数量和边的数量是否满足树的特性,然后使用图的数据结构和广度优先搜索(BFS)遍历所有节点来验证是否存在环路。若所有节点都被访问且没有环,则判断为有效树。
456

被折叠的 条评论
为什么被折叠?



