최소 높이 트리 - leetcode 49번

문제

110. Balanced Binary Tree

  • 무방향이라서 모든 노드들이 동등함
    • 따라서 dictionary로 모든 노드들에서 접근 가능한 노드 리스트 만들어주기
  • leaf 노드들을 계속 제거하면 최종 루트 노드를 구할 수 있음
  • 코드 짜다가 변수가 많아서 헷갈렸는데, 변수명의 중요성에 대해서 깨닫게 됨..
class Solution:
    def solution(self, n: int, edge: List[List[int]]) -> List[int]:
        graph = collections.defaultdict(list)

        for v1, v2 in edge:
            graph[v1].append(v2)
            graph[v2].append(v1)
        leaves = []
        for key in graph:
            if len(graph[key]) == 1: # node가 1개일때
                leaves.append(key) # key -> leaves에 저장

        while n > 2:
            n -= len(leaves)
            new_leaves = []
            for node_1 in leaves:
                key_leaf = graph[node_1].pop()
                graph[key_leaf].remove(node_1)
                if len(graph[key_leaf]) == 1:
                    new_leaves.append(key_leaf)
            leaves = new_leaves
        return leaves
n = 4
edge = [[1, 0], [1, 2], [1, 3]]
result = Solution().solution(n, edge)
print(result)