2016-07-03 3 views
1

하나의 노드가 여러 개의 자식을 가질 수있는 트리를 작성하려고합니다 (아래 참조). 나는 아래의 응용 프로그램을 실행하려고 할 때, 나는 "주"java.lang.StackOverflowError의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.listnode1node2을 포함하며 이들은 root을 포함합니다.

그것은 인쇄 (*) root을하지만, 이는 결국 스택을 불고, 그것은 nodes 1과 2를 인쇄 할 필요가 root를 인쇄 할 수 있지만, 결코 끝나지 않는, 그래서 root 및 인쇄 할 필요가 이러한 인쇄하려고

메소드 호출 정보를 저장하는 JVM의 것.

(*) 여기서 "인쇄"라는 단어는 다소 느슨하게 사용되며 실제로는 object 각각에 대해 object.toString에 대한 호출입니다.