2012-10-13 51 views
3

我正試圖從相應的字符串文件中加載二叉樹。我很早就在代碼中發現了一個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]包含有對這個問題的開頭列出的內容的文本文件的名稱。

如果任何人都可以把我放在正確的方向,這將是有益的。

如果您需要任何其他信息,請讓我知道。

+1

爲了儘快提供更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

+0

那麼'你好'是一個葉節點?也是拋出NoSuchElement的'pop()'。不是'if'條件 – st0le

+0

是的,'hello'是一個葉節點。如果'hello'被推入堆棧,爲什麼試圖從堆棧中彈出它會引發異常? – user1547050

回答

0

您關於讀取數據元素的代碼和if條件似乎很好。 錯誤不在此行if(rightChild == 1)。請仔細看看,它必須來自此行或包含您的堆棧操作的其他行。

我懷疑它來自tree.right,因爲沒有像這樣的元素。如果您可以分享其他代碼,則可以幫助您找到確切的問題。

+0

我更新了它,包括幾乎所有的代碼 – user1547050

+0

'Loader'和'BinaryTree'在哪裏? –

+0

Loader是包含加載文件的方法以及發佈的主要方法的類。 BinaryTree是一個抽象類,只包含EmptyTree和ConsTree的方法。 – user1547050