enum Tree {
Empty | Leaf(Int64) | Node(Int64, Tree, Tree)
public func traverse(): Unit {
match (this) {
case Empty => ()
case Leaf(value) => print(value)
case Node(value, left, right) =>
left.traverse()
print(value)
right.traverse()
}
}
static public func generate(depth: UInt8): Tree {
if (depth == 1) {
return Leaf(1)
}
return Node(Int64(depth),
generate(depth - 1), generate(depth - 1))
}
}
main() {
let tree = Node(1,
Node(2, Node(3, Empty, Leaf(4)), Empty),
Node(5, Leaf(6), Leaf(7)))
tree.traverse()
println()
let fullTree = Tree.generate(5)
fullTree.traverse()
}