Skip to content

Instantly share code, notes, and snippets.

@spurscho
Last active February 5, 2020 07:12
Show Gist options
  • Save spurscho/4519cbe6948d2633a1ecb2d585c6b238 to your computer and use it in GitHub Desktop.
Save spurscho/4519cbe6948d2633a1ecb2d585c6b238 to your computer and use it in GitHub Desktop.
BST_Implement.swift
public class BinaryNode<Element> {
public var value: Element // 노드의 값
public var leftChild: BinaryNode? // 왼쪽 노드 (옵셔널)
public var rightChild: BinaryNode? // 오른쪽 노드 (옵셔널)
public init(value: Element) { self.value = value } // 초기화 함수
public func traverseInOrder(visit: (Element) -> Void) {
leftChild?.traverseInOrder(visit: visit)
visit(value)
rightChild?.traverseInOrder(visit: visit)
}
public func traversePreOrder(visit: (Element) -> Void) {
visit(value)
leftChild?.traversePreOrder(visit: visit)
rightChild?.traversePreOrder(visit: visit)
}
public func traversePostOrder(visit: (Element) -> Void) {
leftChild?.traversePostOrder(visit: visit)
rightChild?.traversePostOrder(visit: visit)
visit(value)
}
}
extension BinaryNode: CustomStringConvertible {
public var description: String {
return diagram(for: self)
}
private func diagram(for node: BinaryNode?,
_ top: String = "",
_ root: String = "",
_ bottom: String = "") -> String {
guard let node = node else {
return root + "nil\n"
}
if node.leftChild == nil && node.rightChild == nil {
return root + "\(node.value)\n"
}
return diagram(for: node.rightChild, top + " ", top + "┌──", top + "│ ")
+ root + "\(node.value)\n"
+ diagram(for: node.leftChild, bottom + "│ ", bottom + "└──", bottom + " ")
}
}
var tree: BinaryNode<Int> {
let zero = BinaryNode(value: 0)
let one = BinaryNode(value: 1)
let five = BinaryNode(value: 5)
let seven = BinaryNode(value: 7)
let eight = BinaryNode(value: 8)
let nine = BinaryNode(value: 9)
seven.leftChild = one
one.leftChild = zero
one.rightChild = five
seven.rightChild = nine
nine.leftChild = eight
return seven // 루트노드 반환
}
print(tree)
tree.traverseInOrder {
print($0)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment