[sw] 예? BFS를 DFS로 바꾸라구요?


문제 정보
check포인트 : 1 (부분 점수)
schedule시간 제한 : 2.0s
storage메모리 제한 : 512M
edit_square출제자:
 
답안 제출

포화 이진 트리는 다음의 두 조건을 만족하는 트리이다:

• 모든 내부 노드(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

댓글

현재 작성된 댓글이 없습니다.