jsbean / Collections

Collection data structures

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Implement pre-order and post-order methods on Tree

jsbean opened this issue · comments

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 */ }

I like the explicitly named methods. having an enum seems like overkill when there are only 2-3 cases.