Implement pre-order and post-order methods on Tree
jsbean opened this issue · comments
James Bean commented
extension Tree {
func preOrder(_ f: (T) -> U) -> Tree<U>
func postOrder(_ f: (T) -> U) -> Tree<U>
}
It could be extended further with:
extension Tree {
enum Traversal {
case preOrder, postOrder
}
func traverse(_ traversal: Traversal, _ f: (T) -> U) -> Tree<U>
}
Instead of taking T
as a parameter, it could take the node itself?:
func traverse(_ traversal: Traversal, _ f: (Tree<T>) -> Tree<U>) -> Tree<U>
Called like:
let t = Tree<Guava>
let newTree = t.traverse(.postOrder) { /* visit node */ }
moss heim commented
I like the explicitly named methods. having an enum seems like overkill when there are only 2-3 cases.