У меня есть класс case, определенный в scala как
case class Node(key: String, value: String, var left: Node, var right: Node)
, и я пытаюсь обойти его, используя хвостовую рекурсию и регистр соответствия, а не циклы и операторы if.Мой текущий метод обхода следующий:
def find(key:String, tree:Node): Option[String] = {
if(tree == null) {
return None
} else if (tree.key == key) {
return Some(tree.value)
}
val checkLeft = find(key, tree.left)
val checkRight = find(key, tree.right)
if(checkLeft != None) {
return checkLeft
} else if(checkRight != None) {
return checkRight
}
return None
}
Как мне лучше всего создать совпадение с делами, использующими хвостовую рекурсию?
В настоящее время у меня есть:
key match {
case tree.key => Some(tree.value)
case _ => find(key, tree.left)
}
но, очевидно, это не будет правильно проходить через все мое дерево.