2013-04-08 123 views
1

我想從左到右打印出樹中的所有內容(不是二叉樹)。我有以下的樹類及其方法:在java中遞歸地打印樹中的所有節點

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 2013-04-08 00:10:39

+2

您正在獲取NPE,因爲某些內容爲空。你應該使用調試器來找出那是哪個東西。 – 2013-04-08 00:11:12

回答

2

您的Node(String newNodeData, Node newNodeParent)構造函數不會初始化子元素,因此它的空值。您只能初始化根節點的子數組。

也,當iteratin以上的兒童,或者比較索引children.getSize()或切換到較新的for(Node n : children)語法

作爲最終的旁註 - 您選擇從樹構造訪問節點filds。來自不同類的直接字段訪問通常在java中被忽略。