有人能告诉我这个BST代码究竟是做什么的吗?

时间:2017-02-02 00:34:53

标签: scala binary-search-tree

在最近的作业中,我们使用以下函数删除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),之后的所有内容仍然有点令人困惑

0 个答案:

没有答案