문제 링크 (opens new window)

# 풀이

  1. 알파벳 순으로 노드가 배치됨
  2. 딕셔너리 키값이 루트노드가 되고 길이 2짜리 배열이 각각 left, right에 해당함
  3. 트리 순회시 .을 조회중이면 리턴하도록 코드 작성
import Foundation

let N = Int(readLine()!)!
var nodes: [String: [String]] = [:]

for _ in 0..<N {
    let input = readLine()!.split(separator: " ").map { String($0) }
    let root = input[0]
    let sub = Array(input[1...2])
    nodes[root] = sub
}

func preorder(_ current: String) {
    if current == "." { return }
    print(current, terminator: "")
    guard let left = nodes[current]?[0],
       let right = nodes[current]?[1] else {
        return
    }

    preorder(left)
    preorder(right)
}

func inorder(_ key: String) {
    if key == "." { return }
    guard let left = nodes[key]?[0],
          let right = nodes[key]?[1] else { return }
    inorder(left)
    print(key, terminator: "")
    inorder(right)
}

func postorder(_ key: String) {
    if key == "." { return }
    guard let left = nodes[key]?[0],
          let right = nodes[key]?[1] else { return }
    postorder(left)
    postorder(right)
    print(key, terminator: "")
}

preorder("A")
print()
inorder("A")
print()
postorder("A")