以递归方式在java中打印树中的所有节点

时间:2013-04-08 00:09:52

标签: java tree

我想从左到右打印出树(不是二叉树)中的所有内容。我有以下树类及其方法:

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时,树的根节点将传递给它。我是否过度简化了打印方法,还是有更好的方法来做到这一点?我在网上找到的所有内容都是针对二叉搜索树的,我无法弄清楚如何将其应用于此。

我也愿意迭代地这样做,但我不知道从哪里开始,我知道这会比递归地复杂化更复杂。或者,如果我说错了,请告诉我。

1 个答案:

答案 0 :(得分:2)

您的Node(String newNodeData, Node newNodeParent)构造函数未初始化子项,因此它为null。你只需初始化根节点的children数组。

另外,当iteratin over children时,要么将index与children.getSize()进行比较,要么切换到较新的for(Node n : children)语法

作为最后的旁注 - 您从Tree构造函数访问Node filds。来自不同类的直接字段访问在java中通常是不受欢迎的。