在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
。您应该使用调试器来确定这是什么内容。