我正試圖從相應的字符串文件中加載二叉樹。我很早就在代碼中發現了一個NoSuchElementException錯誤(確切的說是註釋),而且我不確定該算法是否可以開始工作。該文本文件排序是這樣的:Java - 從文本文件加載二叉樹
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]包含有對這個問題的開頭列出的內容的文本文件的名稱。
如果任何人都可以把我放在正確的方向,這將是有益的。
如果您需要任何其他信息,請讓我知道。
爲了儘快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –
那麼'你好'是一個葉節點?也是拋出NoSuchElement的'pop()'。不是'if'條件 – st0le
是的,'hello'是一個葉節點。如果'hello'被推入堆棧,爲什麼試圖從堆棧中彈出它會引發異常? – user1547050