gpt4 book ai didi

Java - 从文本文件加载二叉树

转载 作者:行者123 更新时间:2023-12-05 00:07:18 25 4
gpt4 key购买 nike

我正在尝试从相应的字符串文件加载二叉树。我很早就在代码中收到了一个 NoSuchElementException 错误(确切的行已被注释),而且我不确定该算法是否会开始工作。文本文件的顺序如下:

hello 0 0
my 0 0
name 1 1

其中第一个数字表示节点是否有左 child ,第二个数字表示节点是否有右 child 。

我的 BinaryTree 类有两个子类,ConsTree 和 EmptyTree,每棵树都有自己的左子树和右子树。

方法代码如下:

BinaryTree<String> loadFile(String filename)
{
File file = new File(filename);
Scanner scanny = new Scanner(file);

Stack<BinaryTree<String>> stack = new Stack<BinaryTree<String>>();

while(scanny.hasNextLine())
{
String data = scanny.next();
int leftChild = scanny.nextInt();
int rightChild = scanny.nextInt();
ConsTree<String> tree = new ConsTree<String>(data, null, null);

if(rightChild == 1) //this line throws a NoSuchElementException
{
tree.right = stack.pop();
}

if(leftChild == 1)
{
tree.left = stack.pop();
}

stack.push(tree);
}

return stack.pop();
}

这是我的 ConsTree 类的构造函数。这是我制作该方法时仅有的其他代码。

public ConsTree(T data, BinaryTree<T> left, BinaryTree<T> right)
{
this.data = data;
this.left = left;
this.right = right;
}

public ConsTree(T data)
{
this.left = new EmptyTree();
this.right = new EmptyTree();
this.data = data;
}

EmptyTree 类的构造函数是完全空白的。

这是我用来测试该方法的内容:

 public static void main(String[] args) 
{
Loader l = new Loader(); //the class with the load method in it
BinaryTree<String> t = l.loadFile(args[0]);
System.out.println(t);
}

args[0] 包含文本文件的名称,该文件的内容在问题开头列出。

如果有人能引导我走向正确的方向,那将会很有帮助。

如果您需要任何其他信息,请告诉我。

最佳答案

您根据读取数据元素和 if 条件编写代码似乎没问题。 此行未出现错误 if(rightChild == 1)。请仔细看,它必须来自这一行 tree.right = stack.pop(); 或其他包含您的堆栈操作的行。

我怀疑它来自 tree.right,因为没有这样的元素。如果您可以共享其余代码,将有助于找到确切的问题。

关于Java - 从文本文件加载二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12869852/

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