[leetcode] 261. Graph Valid Tree

本文介绍了如何验证一个图是否是有效树,即无向图且无环且只包含一个连通分量。分别通过BFS、Union Find和DFS三种方法进行解题,详细阐述了每种方法的思路,并分析了时间复杂度。
摘要由CSDN通过智能技术生成

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 = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值