Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中递归打印树中的所有节点_Java_Tree - Fatal编程技术网

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

在java中递归打印树中的所有节点,java,tree,Java,Tree,我想从左到右打印出树(不是二叉树)中的所有内容。我有以下树类及其方法: public class Tree { Node root; public Tree(String rootData) { root = new Node(); root.data = rootData; root.children = new ArrayList<Node>(); } public static cla

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

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);
        }
    }
公共类树
{
节根;
公共树(字符串根数据)
{
根=新节点();
root.data=rootData;
root.children=new ArrayList();
}
公共静态类节点
{
私有字符串数据;
私有节点父节点;
私人名单儿童;
公共节点(){}
公共节点(字符串newNodeData、节点newNodeParent)
{
数据=新节点数据;
父项=newNodeParent;
}
}
公共作废打印(节点curNode)
{
int指数=0;
while(curNode.children.get(index)!=null)
{
打印(curNode.children.get(index));
System.out.println(curNode.children.get(index.data));
}
}
它在
打印(curNode.childred.get(index))时抛出空指针异常
line,我不太明白为什么。当第一次调用
print
时,树的根节点被传递给它。是我过于简化了print方法,还是有更好的方法来实现这一点?我在网上找到的所有东西都是针对二进制搜索树的,我不知道如何将其应用于此

我也愿意以迭代的方式来做这件事,但我不知道从哪里开始,我知道这比以递归的方式做要复杂得多。或者如果我这么说是错误的,请告诉我。

您的
节点(字符串newNodeData,节点newNodeParent)
构造函数不初始化子节点,因此为空。您只初始化根节点的子节点数组

另外,当在子节点上迭代时,可以将索引与children.getSize()进行比较,或者切换到较新的
for(节点n:children)
语法


作为最后一个旁注-您正在从树构造函数访问节点字段。在java中,通常不赞成从其他类直接访问字段。

完整跟踪错误输出将非常有用:)您获得NPE是因为某些内容为
null
。您应该使用调试器来确定这是什么内容。