본문 바로가기

알고리즘/백준

2250. 트리의 높이와 너비

⭐️ 트리의 높이와 너비

밑에 표시된 열을 방문 순서라고 생각하면 좋습니다. 그러면 중위순회라는 것을 알아낼 수 있습니다.

import sys
input = sys.stdin.readline
n = int(input())
graph= [[] for _ in range(n+1)]
isRoot = [0] * (n + 1) # 루트노드를 찾을 때 쓸 리스트
distance = [[] for _ in range(n+1)] # 각 레벨별 거리 저장
root = 0
for _ in range(n):
  parent, left, right = map(int, input().split())
  graph[parent].append(left)
  graph[parent].append(right)
  isRoot[parent] += 1
  if left != -1:
    isRoot[left] += 1
  if right != -1:
    isRoot[right] += 1
for i in range(1, n+1):
  if isRoot[i] == 1:
    root = i

num = 1 # 가장 왼쪽이 1번
def inorder(start, deep):
  global num
  if graph[start][0] != -1:
    inorder(graph[start][0], deep + 1)
  distance[deep].append(num)
  num += 1 # 왼쪽 다방문하고 실행
  if graph[start][1] != -1:
    inorder(graph[start][1],deep+1)

inorder(root, 1)
level =1 
ans = max(distance[1]) - min(distance[1] ) + 1
for i in range(2, n+1):
  if distance[i]:
    small = min(distance[i])
    large = max(distance[i])
    if ans < large - small + 1:
      ans = large - small + 1
      level = i
print(level, ans)

'알고리즘 > 백준' 카테고리의 다른 글

2638. 치즈  (0) 2022.03.20
13164. 행복 유치원  (0) 2022.03.20
9576. 책 나눠주기  (0) 2022.03.20
9205. 맥주 마시면서 걸어가기  (0) 2022.03.10
3584. 가장 가까운 공통 조상  (0) 2022.02.21