我正在尝试从相应的字符串文件中加载二叉树。我很早就在代码中收到了 NoSuchElementException 错误(确切的行已注释),我不确定该算法是否可以开始工作。文本文件的顺序如下:
hello 0 0
my 0 0
name 1 1
其中第一个数字表示节点是否有左孩子,第二个数字表示节点是否有右孩子。
我的 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] 包含文本文件的名称,该文件的内容列在问题的开头。
如果有人能把我引向正确的方向,那将很有帮助。
如果您需要任何其他信息,请告诉我。