310. Minimum Height Trees
Cut the leaf node until the node left <= 2
Leaf node = indeg == 1
class Solution:
    def findMinHeightTrees(self, n: int, edges: List[List[int]]) -> List[int]:
        
        if n == 1:
            return [0]
        if n == 2:
            return [0,1]
        M = defaultdict(list)
        indeg = [0] * n
        for [v1, v2] in edges:
            M[v1].append(v2)
            M[v2].append(v1)
            indeg[v1] += 1
            indeg[v2] += 1
    
        dq = deque([i for i in range(n) if indeg[i] == 1])
        s = set()
        while dq:
            lens = len(dq)
            for _ in range(lens):
                idx = dq.popleft()
                indeg[idx] -= 1
                s.add(idx)
                for vv in M[idx]:
                    indeg[vv] -= 1
                    if indeg[vv] == 1:
                        dq.append(vv)
        
            if n - len(s) <= 2:
                break
        return dq