判断无向图是否为二叉树

Apr 25, 2024
2 views
Algorithm

给一个无向图,判断其是否为一棵树。如果是树的话,所有的节点必须是连接的,也就是说必须是连通图,而且不能有环,所以就变成了验证是否是连通图和是否含有环。

import collections


class Solution(object):
    def validTree(self, n, edges):
        lookup = collections.defaultdict(list)
        for edge in edges:
            lookup[edge[0]].append(edge[1])
            lookup[edge[1]].append(edge[0])
                    # 判断节点数
                    if len(lookup[edge[0]) > 2 or len(lookup[edge[1]) > 2:
                        return False
        visited = [False] * n

        if not self.helper(0, -1, lookup, visited):
            return False

        for v in visited:
            if not v:
                return False

        return True

    def helper(self, curr, parent, lookup, visited):
        if visited[curr]:
            return False
        visited[curr] = True
        for i in lookup[curr]:
                        #上一个节点不用访问
            if i != parent and not self.helper(i, curr, lookup, visited):
                return False

        return True