我怎样才能绕过重新分配给 val ,二叉搜索树 scala

how can i get arround reassignement to val , binary search tree scala

我正在为 Scala 中的二叉搜索树执行 delete(k) 方法 我有这样的特质

trait BST { 
   def delete(k:Int) :BST
}
case object Empty extends BST {..}
case class Node(data: Int, left: BST, right: BST) extends BST {
  ...
  override def delete(k: Int) :BST = {
   def delete(Node : BST ,key:Int): BST ={
    Node match {
      case Empty => Node
      case Node(x, left, right)=> if(key<x) left=delete(left,key)
                                            ...
        }
     }
    ...
   }

这是我卡住的地方,我已经知道该方法的算法,已经用其他语言完成了,但是在 Scala 中,我似乎无法 assign/change 左右树,它说它是重新分配给 val ,无论如何在不改变我的二进制搜索树的定义的情况下解决这个问题?

在 Scala 中,惯用的方法是尝试避免突变,因此您不会重新分配 left 而是创建和 return 一个新节点(还将 key < x 条件移动到 pattern guard):

def delete(Node : BST ,key:Int): BST ={
    Node match {
      case Empty => Node
      case Node(x, left, right) if key < x => Node(x, delete(left , key), right)
                                            ...
    }
}