2013-04-08 54 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中被忽略。