https://algospot.com/judge/problem/read/TRAVERSAL
import sys
input = sys.stdin.readline
def get_sub_tree(root, inorder):
root_idx = inorder.index(root)
left_tree = inorder[:root_idx]
right_tree = inorder[root_idx + 1:]
return root_idx, left_tree, right_tree
def printPostOrder(preorder, inorder):
if not len(preorder):
return
root = preorder[0]
root_idx , L, R = get_sub_tree(root, inorder)
printPostOrder(preorder[1:root_idx + 1], L)
printPostOrder(preorder[root_idx + 1: len(preorder)], R)
print(root, end=" ")
n_test = int(input())
for i in range(n_test):
num_node = int(input())
preorder = list(map(int, input().split()))
inorder = list(map(int, input().split()))
printPostOrder(preorder, inorder)
print()
"""
* 지속적으로 참조하는 것을 pop과 같은 메서드로 변환하지 않을 것
* pre_order의 원소는 그 원소를 root로 하는 서브트리
* inorder는 root 값 기준으로 왼쪽과 오른쪽이 각각 서브트리의 원소
* 전위 순회: root -> 왼쪽 -> 오른쪽
* 중위 순회: 왼 -> root -> 오
* 후위 순회: 왼 -> 오 -> root
"""
'Algorithm' 카테고리의 다른 글
08/05 BOJ 1261 알고스팟 파이썬 (0) | 2020.08.05 |
---|