valid tree: = 无向图+无环+只一个连通分量
Solution 1 : BFS
思路参考:
算法1:
我们知道对于环 1-2-3-4-1,每个节点的度都是2,基于此我们有如下算法(这是类似于有向图的拓扑排序):
求出图中所有顶点的度
删除图中所有度 <=1 的顶点以及与该顶点相关的边,把与这些边相关的顶点的度减一
如果还有度<=1的顶点重复步骤2
最后如果还存在未被删除的顶点,则表示有环;否则没有环
时间复杂度为O(E+V),其中E、V分别为图中边和顶点的数目。
class Solution {
public boolean validTree(int n, int[][] edges) {
// 判断只有一个连通分量
if(n-1 > edges.length) return false;
//用bfs判断无cycle
HashMap<Integer,Integer> indegree = new HashMap<>();
HashMap<Integer,List<Integer>> graph = new HashMap<>();
//初始化 indegree
for(int i = 0 ; i < n;i++){
graph.put(i,new ArrayList<>());
indegree.put(i,0);
}
for(int i =