Scala: Rekursja wstawiania ogona drzewa ze złożoną strukturą

Tworzę drzewo obiektów niestandardowych w scala, a moja metoda wstawiania generuje przepełnienie stosu, ponieważ nie jest rekurencyjny. Nie potrafię jednak zrozumieć, jak zrobić rekurencyjny ogon. Podobne przykłady widziałem przy użyciu zmiennych „accumulator”, ale albo były to rzeczy takie jak liczby całkowite, które można po prostu pomnożyć i nadpisać, albo listy, które mam problemy z adaptacją do drzewa. Oto co mam:

Podstawa moich drzew:

abstract class GeoTree
case object EmptyTree extends GeoTree
case class Node(elem:GeoNode, left:GeoTree, right:GeoTree) extends GeoTree

Metoda wstawiania do rekurencyjnego tworzenia drzewa (metoda powodująca przepełnienie stosu):

  def insert(t:GeoTree, v: GeoNode): GeoTree = t match {
    case EmptyTree => new Node(v, EmptyTree, EmptyTree)
    case Node(elem:GeoNode, left:GeoTree, right:GeoTree) => {
      if (v < elem) new Node(elem, insert(left, v), right)
      else new Node(elem, left, insert(right, v))
    }
  }

Nie sądzę, aby kod dlaGeoNode jest szczególnie istotny, ponieważ jest bardzo prosty. Klasa ma dwieLong atrybuty i<, >, i== operatory nadpisują odpowiednio do użytku wewnątrz drzewa. Czy ktoś może zasugerować, jak używać akumulatora dla mojegoinsert funkcja lub jakiś inny sposób, aby uczynić go ogonem rekurencyjnym?

questionAnswers(1)

yourAnswerToTheQuestion