트리

면접 대비

시간 제한1초메모리 제한192 MB

요약
이진 트리의 전위 순회와 중위 순회가 주어질 때 트리를 복원하고 후위 순회를 출력한다.
난이도

보통10점 중 4점

유형
트리, 재귀, 분할 정복
정답자
아직 제출이 없습니다

문제

이진 트리(binary tree)는 매우 중요한 기본 자료 구조이다. 이진 트리의 모든 노드는 최대 두 개의 자식 노드를 가질 수 있고, 두 자식에는 순서가 있어 왼쪽 자식이 오른쪽 자식보다 먼저이다. 노드가 nn개인 이진 트리를 BTBT라고 하자. BTBT의 노드에는 11부터 nn까지 서로 다른 번호가 매겨져 있다. 자식이 하나도 없는 노드를 리프 노드(leaf node)라고 부른다.

이진 트리의 모든 노드를 방문하는 순회 방법에는 전위 순회(preorder), 중위 순회(inorder), 후위 순회(postorder)의 세 가지가 있다. 노드 vv의 왼쪽 자식을 v.leftv.\text{left}, 오른쪽 자식을 v.rightv.\text{right}라 하고, 자식이 없으면 그 값은 비어 있다(∅\varnothing)고 하자. 세 순회는 다음과 같이 재귀적으로 정의된다.

  • 전위 순회: 현재 노드를 먼저 방문한 뒤, 왼쪽 서브트리와 오른쪽 서브트리를 차례로 순회한다.
  • 중위 순회: 왼쪽 서브트리를 순회한 뒤 현재 노드를 방문하고, 이어서 오른쪽 서브트리를 순회한다.
  • 후위 순회: 왼쪽 서브트리와 오른쪽 서브트리를 차례로 순회한 뒤, 마지막에 현재 노드를 방문한다.

어떤 이진 트리 BTBT를 전위 순회한 결과와 중위 순회한 결과가 주어진다. 이 두 순회 결과를 이용하면 원래의 이진 트리를 유일하게 복원할 수 있다. 같은 트리를 후위 순회한 결과를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. 각 테스트 케이스의 첫째 줄에는 노드의 개수 nn이 주어진다 (1≤n≤1,0001 \le n \le 1{,}000). 이진 트리의 모든 노드에는 11부터 nn까지 서로 다른 번호가 매겨져 있다. 다음 줄에는 트리를 전위 순회한 결과가, 그 다음 줄에는 중위 순회한 결과가 공백으로 구분되어 주어진다. 입력으로는 항상 두 순회 결과로 유일한 이진 트리가 만들어지는 경우만 주어진다.

출력

각 테스트 케이스마다 해당 트리를 후위 순회한 결과를 한 줄에 공백으로 구분하여 출력한다.

예제2

  1. 예제 1

    입력
    2
    4
    3 2 1 4
    2 3 4 1
    8
    3 6 5 4 8 7 1 2
    5 6 8 4 3 1 2 7
    
    예상 출력
    2 4 1 3
    5 8 4 6 2 1 7 3
    
  2. 예제 2

    입력
    1
    1
    7
    7
    
    예상 출력
    7