Skip to content

Instantly share code, notes, and snippets.

@sumew
Created April 15, 2020 02:58
Show Gist options
  • Save sumew/867f7ef17f16ad6464d1c22d047406e5 to your computer and use it in GitHub Desktop.
Save sumew/867f7ef17f16ad6464d1c22d047406e5 to your computer and use it in GitHub Desktop.
def preOrderR[T,S](tree: Tree[T], f: T => S): Queue[S] = {
def loop(stack: List[Tree[T]], output: Queue[S]): Queue[S] = stack match {
case Nil => output
case Tree(v,c)::ts => loop(c:::ts,output.enqueue(f(v)))
}
loop(tree::Nil, Queue.empty)
}
def postOrderR[T,S](tree: Tree[T], f: T => S): Queue[S] = {
def loop(stack: List[Tree[T]], output: Queue[S]): Queue[S] = stack match {
case Nil => output
case Tree(v,Nil)::ts => loop(ts,output.enqueue(f(v)))
case Tree(v,c::cs)::ts => loop(c::Tree(v,cs)::ts, output)
}
loop(tree::Nil,Queue.empty)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment