[sw] 예? BFS를 DFS로 바꾸라구요?
포화 이진 트리는 다음의 두 조건을 만족하는 트리이다:
• 모든 내부 노드(internal node)는 자식 노드를 정확히 두 개씩 가진다.
• 모든 리프 노드(leaf node)는 같은 깊이(level)에 존재한다.
크기 \(n\)의 포화 이진 트리는 \(n =\) \(2\)\(k\) \(- 1\)개의 노드로 구성되며, 루트 노드는 깊이 \(0\)에 위치한다.
어떤 포화 이진 트리의 루트 노드에서 너비 우선 탐색(BFS, Breadth-First Search)을 수행한 결과값이 주어진다.
이 결과값은 방문 순서대로 방문한 노드의 번호가 공백으로 구분되어 주어진다.
탐색은 두 자식 노드 중 왼쪽 자식 노드를 먼저 방문한 후 오른쪽 자식 노드를 방문하는 방식으로 이루어진다.
따라서 이 BFS의 결과는 포화 이진 트리의 구조를 유일하게 결정한다.
이제 동일한 포화 이진 트리의 루트 노드에서 깊이 우선 탐색(DFS, Depth-First Search)을 수행해보자.
이 탐색 또한 두 자식 노드 중 왼쪽 자식 노드를 먼저 방문하는 방식으로 진행된다.
루트 노드에서 DFS를 수행했을 때, 방문한 순서대로 방문한 노드의 번호를 공백으로 구분하여 출력하시오.
입력 설명
첫째 줄에 트리의 총 노드 수 \(n\)이 주어진다. \(n =\) \(2\)\(k\) \(- 1\) \((1 \le k \le 10)\)
둘째 줄에는 BFS 탐색의 결과가 공백으로 구분되어 주어진다.
포화 이진 트리의 노드 번호는 모두 서로 다른 정수이며, 각 번호는 \(1\) 이상 \(1,000,000\) 이하이다.
출력 설명
루트노드에서 DFS를 수행한 결과를 공백으로 구분하여 출력하라.
예제 입력 1
7
1 2 3 4 5 6 7
예제 출력 1
1 2 4 5 3 6 7
예제 입력 2
15
10 5 20 3 7 15 25 2 4 6 8 12 18 22 30
예제 출력 2
10 5 3 2 4 7 6 8 20 15 12 18 25 22 30