【发布时间】:2017-12-15 03:03:58
【问题描述】:
我正在尝试使用 scala 实现一个简单的二叉树。 我的树定义如下:
abstract class Tree[T <: Ordered[T]]
case class Node[T <: Ordered[T]](v:T, l:Tree[T], r:Tree[T]) extends Tree[T]
case class Leaf[T <: Ordered[T]](v:T) extends Tree[T]
我正在尝试实现一种方法来找到树中的最小值。方法实现如下:
def minInTree[T <: Ordered[T]](t: Tree[T]): T = t match {
case Node(v, lft, rght) if minInTree(lft) > minInTree(rght) => {
val mLft = minInTree(lft)
val mRght = minInTree(rght)
if (v > mRght)
mRght
else
v
}
case Node(v, lft, rght) if minInTree(lft) <= minInTree(rght) => {
val mLft = minInTree(lft)
val mRght = minInTree(rght)
if (v > mLft)
mLft
else
v
}
case Leaf(lf) => lf
}
我发现minInTree(lft) 和minInTree(rght) 被多次调用,我认为这是缓慢而丑陋的。比较使用了多个if-else子句,我认为这也很丑。
有没有什么优雅的方式来重构代码? 任何提示表示赞赏。
【问题讨论】: