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
функция, или какой-то другой способ сделать его рекурсивным?