I tried to implement a simple binary tree, and that is what I came up with:
object main {
class Node[A]
case class EmptyNode[A](value: A) extends Node [A]
case class NonEmptyNode[A](left: Node[A], right: Node[A]) extends Node[A]
def traverse[A](tree: Node[A]): Array[A] = tree match {
case NonEmptyNode(l: Node[A], r: Node[A]) => traverse(l) ++ traverse(r)
case EmptyNode(v: A) => Array(v)
}
def main(args: Array[String]): Unit = {
val binaryTree =
NonEmptyNode(
NonEmptyNode(
EmptyNode("He"),
EmptyNode("llo ")
),
NonEmptyNode(
EmptyNode("Wor"),
EmptyNode("ld")
)
)
val output = traverse(binaryTree).reduce((a, b) => a + b)
println(output)
}
}
Now I am wondering why this is not working by telling me:
Error:(11, 62) type mismatch;
found : scala.collection.mutable.ArraySeq[A]
required: Array[A]
case NonEmptyNode(l: Node[A], r: Node[A]) => traverse(l) ++ traverse(r)
when I fix Ahow String, for example, it works:
object main {
class Node
case class EmptyNode(value: String) extends Node
case class NonEmptyNode(left: Node, right: Node) extends Node
def traverse(tree: Node): Array[String] = tree match {
case NonEmptyNode(l: Node, r: Node) => traverse(l) ++ traverse(r)
case EmptyNode(v: String) => Array(v)
}
def main(args: Array[String]): Unit = {
val binaryTree =
NonEmptyNode(
NonEmptyNode(
EmptyNode("He"),
EmptyNode("llo ")
),
NonEmptyNode(
EmptyNode("Wor"),
EmptyNode("ld")
)
)
val output = traverse(binaryTree).reduce((a, b) => a + b)
println(output)
}
}
which will print Hello World.
source
share