Ну, во-первых, вы можете избавиться от null
, заменив параметры, которые могут быть null
на Option
.В коде вы затем меняете
if (visited != null)
visited.visit2D(x)
на
visited foreach (_ visit2D x)
Оба цикла while можно заменить рекурсивными функциями.Вместо добавления результата в изменяемую переменную, вы можете передать его в качестве неизменяемого параметра-накопителя в рекурсивной функции.
Если у Node
есть экстрактор, вы можете использовать защиту регистра, чтобы сделать midrange
тестовое задание.Не добавляет много, но более идиоматично.
У меня такое ощущение, что оба цикла while могут быть объединены в одну рекурсию, но я не рассмотрел алгоритм достаточно, чтобы определиться с этим.Если это так, вы можете избежать раннего возврата common
.
Кстати, здесь есть ошибка, поскольку в пределах диапазона может отсутствовать общий предок.