File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+
Original file line number Diff line number Diff line change 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)
You can’t perform that action at this time.
0 commit comments