LeetCode题解(0310):最小高度树(Python)

题目:原题链接(中等)

标签:图、广度优先搜索

解法时间复杂度空间复杂度执行用时
Ans 1 (Python) O ( N ) O(N) O(N) O ( N ) O(N) O(N)88ms (72.97%)
Ans 2 (Python)
Ans 3 (Python)

解法一:

class Solution:
    def findMinHeightTrees(self, n: int, edges: List[List[int]]) -> List[int]:
        # 处理1个节点的特殊情况
        if n == 1:
            return [0]
        # 处理2个结点的特殊情况
        if n == 2:
            return [0, 1]

        # 构造图,并统计每个节点的相邻节点数量
        graph = collections.defaultdict(set)
        for edge in edges:
            graph[edge[0]].add(edge[1])
            graph[edge[1]].add(edge[0])

        # 广度优先搜索队列
        queue = collections.deque()
        for i, edge in graph.items():
            if len(edge) == 1:
                queue.append(i)

        while queue:
            n -= len(queue)
            for _ in range(len(queue)):
                # 能遍历到i时,说明i只有一条邻边
                i = queue.popleft()
                j = graph[i].pop()
                graph[j].remove(i)
                if len(graph[j]) == 1:
                    queue.append(j)

            if n == 1 or n == 2:
                return list(queue)
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页