Skip to content

Commit 6ee0739

Browse files
committed
[Silver I] Title: 트리 순회, Time: 8 ms, Memory: 79516 KB -BaekjoonHub
1 parent 01abd5d commit 6ee0739

2 files changed

Lines changed: 74 additions & 0 deletions

File tree

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# [Silver I] 트리 순회 - 1991
2+
3+
[문제 링크](https://www.acmicpc.net/problem/1991)
4+
5+
### 성능 요약
6+
7+
메모리: 79516 KB, 시간: 8 ms
8+
9+
### 분류
10+
11+
트리, 집합과 맵, 재귀
12+
13+
### 제출 일자
14+
15+
2025년 5월 29일 00:30:33
16+
17+
### 문제 설명
18+
19+
<p>이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오.</p>
20+
21+
<p style="text-align: center;"><img alt="" src="https://www.acmicpc.net/JudgeOnline/upload/201007/trtr.png" style="height:220px; width:265px"></p>
22+
23+
<p>예를 들어 위와 같은 이진 트리가 입력되면,</p>
24+
25+
<ul>
26+
<li>전위 순회한 결과 : ABDCEFG // (루트) (왼쪽 자식) (오른쪽 자식)</li>
27+
<li>중위 순회한 결과 : DBAECFG // (왼쪽 자식) (루트) (오른쪽 자식)</li>
28+
<li>후위 순회한 결과 : DBEGFCA // (왼쪽 자식) (오른쪽 자식) (루트)</li>
29+
</ul>
30+
31+
<p>가 된다.</p>
32+
33+
### 입력
34+
35+
<p>첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파벳 대문자로 매겨지며, 항상 A가 루트 노드가 된다. 자식 노드가 없는 경우에는 .으로 표현한다.</p>
36+
37+
### 출력
38+
39+
<p>첫째 줄에 전위 순회, 둘째 줄에 중위 순회, 셋째 줄에 후위 순회한 결과를 출력한다. 각 줄에 N개의 알파벳을 공백 없이 출력하면 된다.</p>
40+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import Foundation
2+
3+
let n = Int(readLine()!)!
4+
var tree = [String:[String]]()
5+
(0..<n).forEach { _ in
6+
let parentChilds = readLine()!.split { $0 == " " }.map { String($0) }
7+
let parent = parentChilds[0]
8+
let childs = Array(parentChilds[1...])
9+
tree[parent] = childs
10+
}
11+
12+
func search(_ node: String, _ rootOrder: Int) -> String {
13+
if node == "." { return "" }
14+
guard let childsList = tree[node] else { return "" }
15+
let root = node
16+
let left = search(childsList[0], rootOrder)
17+
let right = search(childsList[1], rootOrder)
18+
if rootOrder == 0 {
19+
return root + left + right
20+
} else if rootOrder == 1 {
21+
return left + root + right
22+
} else {
23+
return left + right + root
24+
}
25+
}
26+
//전위
27+
//중위
28+
//후위
29+
let answer0 = search("A", 0)
30+
let answer1 = search("A", 1)
31+
let answer2 = search("A", 2)
32+
print(answer0)
33+
print(answer1)
34+
print(answer2)

0 commit comments

Comments
 (0)