题目:​​原题链接​(中等)

标签:图、广度优先搜索

解法

时间复杂度

空间复杂度

执行用时

Ans 1 (Python)

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)