2013-04-08 6 views
1

왼쪽에서 오른쪽으로 이진 트리가 아닌 모든 트리를 인쇄하려고합니다.자바의 트리에있는 모든 노드를 재귀 적으로 인쇄하십시오.

public class Tree 
{ 
    Node root; 

    public Tree(String rootData) 
    { 
     root = new Node(); 
     root.data = rootData; 
     root.children = new ArrayList<Node>(); 
    } 

    public static class Node 
    { 
     private String data; 
     private Node parent; 
     private List<Node> children; 

     public Node(){} 

     public Node(String newNodeData, Node newNodeParent) 
     { 
      data = newNodeData; 
      parent = newNodeParent; 
     } 
    } 

    public void print(Node curNode) 
    { 
     int index = 0; 
     while(curNode.children.get(index) != null) 
     { 
      print(curNode.children.get(index)); 
      System.out.println(curNode.children.get(index).data); 
     } 
    } 

는 그것은 print(curNode.childred.get(index)); 라인에서 널 포인터 예외가 발생 내가 아주 이유를 이해 해달라고 : 나는 다음과 같은 트리 클래스와 메서드를 가지고있다. print이 처음 호출되면 트리의 루트 노드가 전달됩니다. 인쇄 방법을 간소화하고 있습니까? 아니면 일반적으로 더 좋은 방법이 있습니까? 온라인에서 찾은 모든 것은 이진 검색 트리를위한 것이었고이 방법을이 방법에 적용하는 방법을 알지 못했습니다.

또한 반복적으로이 작업을 수행 할 수 있지만 어디서부터 시작해야할지 모르겠다. 재귀 적으로 복잡한 작업을 수행한다는 것을 알고있다. 아니면 내가 잘못 말하면 알려주세요.

+0

오류 출력의 전체 추적은 유용 할 것입니다. – CodeGuy

+2

뭔가가 'null'이기 때문에 NPE가 표시됩니다. 디버거를 사용하여 어떤 것이 있는지 파악해야합니다. –

답변

2

Node(String newNodeData, Node newNodeParent) 생성자가 자식을 초기화하지 않으므로 null이됩니다. 루트 노드의 자식 배열 만 초기화합니다. 또한

, iteratin을 자녀 이상, children.getSize (에 인덱스를 비교 중 하나) 또는 마지막 (!) 참고로 새로운 for(Node n : children) 구문

로 전환 - 트리 생성자에서 노드 filds 접근 개봉. 다른 클래스로부터의 직접적인 필드 액세스는 일반적으로 자바에서 눈살을 찌푸리게됩니다.

관련 문제