Graph Valid Tree

最容易想的就是并查集算法了,因为这里的edge都是无向的,所以理论上我们可以以树上的任何一个点为并查集的头结点,这样一直添加搜索下去,如果此图真的是一颗树,则并查集里面只可能有一个联通分量,此外如果edges的长度不等于n - 1可以直接判错,因为n个结点的树就是有n - 1条边,不多不少,另外这里的树指的不是二叉树,而是各种类型的树都算

class Solution(object):
    def validTree(self, n, edges):
        """
        :type n: int
        :type edges: List[List[int]]
        :rtype: bool
        """
        m = len(edges)
        if m != n - 1:
            return False

        parent = [-1] * n
        total = n

        for st, ed in edges:
            a = self.find(parent, st)
            b = self.find(parent, ed)
            if a != b:
                parent[a] = b
                total -= 1

        return total == 1

    def find(self, parent, node):
        if parent[node] == -1:
            return node
        parent[node] = self.find(parent, parent[node])
        return parent[node]

results matching ""

    No results matching ""