在最近的作业中,我们使用以下函数删除scala中给定BST中的最小数字。 这是我们的deleteMin函数的代码:
def deleteMin(t: SearchTree): (SearchTree, Int) = {
require(t != Empty)
(t: @unchecked) match {
case Node(Empty, d, r) => (r, d)
case Node(l, d, r) =>
val (left, m) = deleteMin(l)
(Node(left, d, r), m)
}
}
我得到了大部分内容,但我对这条线的作用仍然有些模糊:
val (left, m) = deleteMin(l)
我认为它会跟踪当前的最小值,并保留它完整遍历的树以供日后使用。
当我们在这个函数delete中使用deleteMin时,我变得更加模糊:
def delete(t: SearchTree, n: Int): SearchTree = {
t match{
case Empty => Empty
case Node(l, d, r) =>
if (n < d) Node(delete(l, n), d, r)/*go left*/
else if(n > d) Node(l, d, delete(r, n))
else if(r == Empty) l/*not in the tree at all*/
else if(l == Empty) r
else {
val New = deleteMin(r)
Node(l, New._2, New._1)
}
}
}
我真的不知道为什么它会调用deleteMin(r),之后的所有内容仍然有点令人困惑