Я пытаюсь создать двоичное дерево в scala и должен сделать для него метод, поэтому я пытаюсь сделать функции внутри класса, который имеет дело с дочерними элементами и родителями. Я хочу сделать родительское дерево таким, чтобы я мог рекурсивно вызвать его в другой функции, называемой getPath, но я не могу создать дерево внутри класса Tree. это код:Scala: класс, объявляющий себя как переменную
case class Tree[+T](value: T, left: Option[Tree[T]], right: Option[Tree[T]]) {
var parent: Tree[T] = null
//method for setting the parent of tree.
//this method returns the parent TREE instead of the parent value
//so if you want to use it to find the value, you need to get the parent.value
def setParent(tree: Tree[T]) {
parent = tree
}
//method for returning the parent
//the parent is a tree so you have to .value it to get the root
def getParent(): Tree[T] = parent
//setting parents of left child and right child if they are not empty trees
if(left != None) {
left.get.setParent(this)
}
if(right != None) {
right.get.setParent(this)
}
}
def getPath[T](tree: Tree[T]):List[T] = {
if(tree.getParent == null) List(tree.value)
List(tree.value)++getPath(tree.getParent())
}
я могу установить T на любой, и он будет работать, но тогда я не могу назвать это рекурсивно, если вы делаете. Может ли кто-нибудь помочь мне или есть другой способ получить родителя дерева?
Спасибо. Я поражен тем, как вы усовершенствовали мой любительский код так, как вы это делали. Надеюсь, однажды я смогу сделать то же самое. Спасибо! – FireDragonMule