Skip to content

Instantly share code, notes, and snippets.

@TerryCK
Created November 13, 2019 11:03
Show Gist options
  • Save TerryCK/e14b717ed29051d44e414a36635b5ff1 to your computer and use it in GitHub Desktop.
Save TerryCK/e14b717ed29051d44e414a36635b5ff1 to your computer and use it in GitHub Desktop.
tree by indirect enum implements
import Foundation
indirect enum Node<Element>: CustomStringConvertible {
case leaf(Element)
case child(left: Self?, element: Element, right: Self?)
var description: String {
switch self {
case let .child(left: _, element: element, right: _): return String(describing: element)
case let .leaf(element) : return String(describing: element)
}
}
}
let left1 = Node.leaf(1)
let left2 = Node.leaf(2)
let leaf = Node.leaf(4)
let node1 = Node.child(left: left1, element: 3, right: left2)
let root = Node.child(left: node1, element: 10, right: leaf)
struct Tree<Element> {
let root: Node<Element>
func preOrderTravesal(node: Node<Element>) {
switch node {
case let .child(left: left, element: element, right: right):
if let left = left {
preOrderTravesal(node: left)
}
print(element)
if let right = right {
preOrderTravesal(node: right)
}
case .leaf(let element):
print(element)
}
}
}
let binaryTree = Tree(root: root)
binaryTree.preOrderTravesal(node: binaryTree.root)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment