백준 9934 : 완전 이진 트리 (python)

liliili·2022년 12월 17일

백준

목록 보기
70/214

본문 링크

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 일때 값을 저장한다.

0개의 댓글