Scala: рекурсия хвостовой вставки дерева со сложной структурой

Я создаю дерево пользовательских объектов в Scala, и мой метод вставки вызывает переполнение стека, потому чтоне хвостовой рекурсив Тем не менее, я могуЯ не могу понять, как сделать его рекурсивным. Связанные примеры I 'видел использованиеаккумулятор» переменные, но ониВы были такими вещами, как целые числа, которые можно просто умножить и перезаписать, или списками, которые яУ меня проблемы с адаптацией к дереву. Вот'Что у меня есть:

Основа для моих деревьев:

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

Метод вставки для рекурсивного создания дерева (метод, вызывающий переполнение стека):

  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))
    }
  }

Я нене думаю, что код дляGeoNode на самом деле особенно актуально, потому что этоочень просто. В классе есть дваLong атрибуты и, а также== операторы переопределяются соответствующим образом для использования внутри дерева. Может кто-нибудь сделать предложение о том, как использовать аккумулятор для моегоinsert функция, или какой-то другой способ сделать его рекурсивным?

Ответы на вопрос(1)

Ваш ответ на вопрос