import sys
input=sys.stdin.readline
def DFS(start,end,level):
if start==end:
answer[level].append(tree[start])
return
mid=(start+end)//2
answer[level].append(tree[mid])
DFS(start,mid-1,level+1)
DFS(mid+1,end,level+1)
N=int(input())
tree=list(map(int,input().split()))
answer=[ [] for _ in range(N) ]
DFS(0,len(tree)-1,0)
for i in answer:
print(*i)
📌 어떻게 접근할 것인가?
중위 순회의 결과값을 보고 기존 트리를 구현하는문제이다.
문제 입력 예시를 잘 보면 가장 중앙값이 부모노드가 되고
다시 반으로 나누어서 그 반중에 가장 중앙값이 다시 부모노드가 된다.
따라서 노드의 높이를 저장하기 위해 2차원 배열 answer 을 선언해주고
분할정복처럼 mid=(start+end)//2 로 반으로 나누어 준후
왼쪽 오른쪽을 탐색한다.
매번 level 값에 따라 값을 저정하거나 start==end 일때 값을 저장한다.