2016-07-03 9 views
1

1つのノードが複数の子を持つことができるツリーを構築しようとしています(下記参照)。私は、以下のアプリケーションを実行しようとすると、私は、DataケースクラスStackOverflowErrorツリーを構築する

java.lang.StackOverflowErrorを

スレッドの例外「メイン」の宣言では、以下の項目を取得し、これは何を意味するのでしょうか?

// data: information stored in the node 
// list: list of children nodes 
// parent: pointer to the parent 
case class Node[A] (data: A, var list: List[Node[A]], var parent: Node[A]) 

case class Data (descrip: String) 

object Tree extends App { 

    val root = Node(Data("root"),null,null) 

    val node1 = Node(Data("node1"),null,root) 
    val node2 = Node(Data("node2"),null,root) 
    val list = List(node1, node2) 

    root.list = list 

    println(root) 

} 

答えて

2

これは、構造に無限のサイクルがあることを意味します。 root.listは、node1およびnode2を含み、これらはrootを含む。

それはそれはnodes 1と2を印刷する必要がありますが、これらを印刷するには、それが最終的にあるスタックを、爆破、rootを印刷するというように、終わることはありませんする必要がありroot(*)を印刷しようとしますが、rootを印刷しますメソッド呼び出し情報を格納するJVM内のもの。

(*)ここでは、「印刷」という言葉はむしろゆるやかに使用されていますが、実際にはobjectのそれぞれについてobject.toStringへの呼び出しです。

関連する問題