我怎样才能绕过重新分配给 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)
...
}
}
我正在为 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)
...
}
}