Возможно ли реализовать двунаправленное дерево в классе дел.Кажется, это должно быть легко, но я становлюсь тупым
case class Node(name:String, parent:Option[Node], children:List[Node])
Я хочу добавить ребенка (и получить новый корень) - что-то вроде
def addChild(n:String):Node = {
Node(name, parent, Node(n, Some(this), Nil)::children)
}
Ноэто не сработает, потому что «родитель» в дочернем элементе больше не будет ссылаться на узел, который перечисляет дочерний элемент как дочерний.Возможно ли это с неизменяемыми списками и классами дел?
На основе ответа, данного ниже
case class Node(name: String, parent: () => Option[Node], children: List[Node]) {
def makeChild(name: String) = {
lazy val newParent:Node = Node(this.name, this.parent, kid :: this.children)
lazy val kid:Node = Node(name, () => Some(newParent), Nil)
newParent
}
}