我正在為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 中,我似乎無法分配/更改左右樹,它說這是對 val 的重新分配,無論如何在不改變我的二叉搜索樹定義的情況下解決這個問題?
uj5u.com熱心網友回復:
在 Scala 中,慣用方法是嘗試避免突變,因此您無需重新分配left而是創建并回傳一個新節點(也將key < x條件移動到模式保護):
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)
...
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/477945.html
標籤:斯卡拉
上一篇:抽象案例類的正確使用
