Scala递归和单位

时间:2014-01-29 03:26:10

标签: scala recursion binary-tree

我在scala中实现了一个基本的二叉树。我正在实现插入,我遇到的问题是我的递归函数在一个尚未初始化的节点上调用它自己。

// binarytree.scala
sealed abstract class Tree {
  def insert(_value: Int)
}

case class Node(value: Int, left: Tree, right: Tree) extends Tree {
  def insert(_value: Int) =
    if (_value < value) Node(value, left.insert(_value), right)
    else Node(value, left, right.insert(_value))
}

case object End extends Tree {
  def insert(_value: Int) = Node(_value)
}

object Node {
 def apply(_value: Int): Node = Node(_value, End, End)
}

var bt = Node( 3 )
println(bt.insert(4))

我的实现使用End节点来表示尚未实例化的节点。我认为这样可以避免我得到的确切错误。这是left.insert()的错误日志:

error: type mismatch;
  found   : Unit
  required: this.Tree
    if (_value < value) Node(value, left.insert(_value), right)

有人有任何建议吗?

1 个答案:

答案 0 :(得分:1)

您只需要在Tree类中注释insert的返回类型:

sealed abstract class Tree {
  def insert(_value: Int) : Node
}

现在推断其返回类型为单位