Last active
February 5, 2020 07:12
-
-
Save spurscho/4519cbe6948d2633a1ecb2d585c6b238 to your computer and use it in GitHub Desktop.
BST_Implement.swift
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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