Zrob drzewo i wrzucaj po kolei.
W sumie to masz nawet kod.
sealed trait Tree[+A] {
def +[B >: A <% Ordered[B]](x: B): Tree[B]
}
case class Node[+A](value: A, left: Tree[A], right: Tree[A]) extends Tree[A] {
def +[B >: A <% Ordered[B]](x: B) =
if (x <= value) Node(value, left + x, right)
else Node(value, left, right + x)
override def toString =
s"Tree(${value.toString}, ${left.toString}, ${right.toString})"
}
case object End extends Tree[Nothing] {
def +[B <% Ordered[B]](x: B) = Node(x)
override def toString = "."
}
object Node {
def apply[A](value: A): Node[A] = Node(value, End, End)
}
object Tree {
def apply[T <% Ordered[T]](l: List[T]): Tree[T] =
l.foldLeft(End: Tree[T])((r, e) => r + e)
}
object Main extends App {
val list = List(9,2,1,4,7,11)
val tree = Tree(list)
println(tree)
}
http://ideone.com/hwWZGY