gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:25:54 25 4
gpt4 key购买 nike

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

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首先被调用,树的根节点被传递给它。我是否过度简化了打印方法,或者是否有更好的方法来做到这一点?我在网上找到的所有内容都是针对二叉搜索树的,但我不知道如何将其应用于此。

我也愿意迭代地执行此操作,但我不知道从哪里开始,而且我知道这会比递归执行更复杂。或者如果我说错了请告诉我。

最佳答案

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

此外,当迭代子项时,可以将索引与children.getSize() 进行比较,或者切换到较新的for(Node n : Children) 语法

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

关于java - java中递归打印树中的所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15869375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com