본문 바로가기

algorithm/exercise

[BOJ 2263] 백준 2263 트리의 순회

문제

https://www.acmicpc.net/problem/2263

 

2263번: 트리의 순회

첫째 줄에 n(1≤n≤100,000)이 주어진다. 다음 줄에는 인오더를 나타내는 n개의 자연수가 주어지고, 그 다음 줄에는 같은 식으로 포스트오더가 주어진다.

www.acmicpc.net

 

풀이

 

 

python3

import sys
sys.setrecursionlimit(10**6)

def solution(inorder_start, inorder_end, postorder_start, postorder_end):
    if inorder_start > inorder_end or postorder_start > postorder_end:
        return

    parentNode = postOrder[postorder_end]
    print(parentNode, end=" ")

    left = inorder_idx_dict[parentNode] - inorder_start
    right = inorder_end - inorder_idx_dict[parentNode]

    solution(inorder_start, inorder_start+left-1, postorder_start, postorder_start+left-1) # 왼쪽
    solution(inorder_end-right+1, inorder_end, postorder_end-right, postorder_end-1) # 오른쪽 서브트리


if __name__ == '__main__':
    n = int(input())

    global inOrder, postOrder, inorder_idx_dict
    inOrder = list(map(int, input().split()))
    postOrder = list(map(int, input().split()))

    inorder_idx_dict = dict()
    for idx, num in enumerate(inOrder):
        inorder_idx_dict[num] = idx

    solution(0, n-1, 0, n-1)

 

아쉬웠던점