https://www.acmicpc.net/problem/2250
2250번: 트리의 높이와 너비
첫째 줄에 노드의 개수를 나타내는 정수 N(1 ≤ N ≤ 10,000)이 주어진다. 다음 N개의 줄에는 각 줄마다 노드 번호와 해당 노드의 왼쪽 자식 노드와 오른쪽 자식 노드의 번호가 순서대로 주어진다.
www.acmicpc.net
💡중위순회를 통해 앞에서부터 차례대로 탐색
✔소스코드
N=int(input())
matrix=[[0]*2 for i in range(N+1)]
node = [0 for i in range(N + 1)]
row = [[] for i in range(N + 1)]
#입력받은 수를 matrix에 채우기
for i in range(N):
ro,le,ri=map(int,input().split())
matrix[ro][0]=le
matrix[ro][1]=ri
node[ro]+=1
if le!=-1:
node[le]+=1
if ri!=-1:
node[ri]+=1
#inorder를 위한 root노드 정하기
for i in range(1,N+1):
if node[i]==1:
root=i
num=1
def inorder(root, level):
global num
if matrix[root][0] != -1:
inorder(matrix[root][0], level + 1)
row[level].append(num)
num += 1
if matrix[root][1] != -1:
inorder(matrix[root][1], level + 1)
inorder(root,1)
#너비 구하기
width=max(row[1])-min(row[1])+1
level=1
#처음부터 가장 넓은 레벨찾기
for i in range(2,N+1):
if row[i]:
if width < max(row[i]) - min(row[i]) + 1:
width = max(row[i]) - min(row[i]) + 1
level = i
print(level, width)
'백준문제풀이' 카테고리의 다른 글
[백준 문제풀이] 11488번 : 연산자 끼워넣기 (0) | 2021.10.10 |
---|---|
[백준 문제풀이] 11725번 : 트리의 부모 찾기 (0) | 2021.09.26 |
[백준 문제풀이] 1991번 : 트리 순회 (0) | 2021.09.26 |
[백준 문제풀이] 14226번 : 이모티콘 (0) | 2021.09.19 |
[백준 문제풀이] 13913번 : 숨바꼭질4 (0) | 2021.09.19 |