2015-12-14 32 views
1

我試圖把一個二叉搜索樹與n個元素並將它們存儲在一個數組列表中。目前,它們存儲在數組列表中的位置是以樹的根爲元素1(p =數組中父元素的索引),左邊的子元素爲索引p * 2,右邊的子元素爲在指數p * 2 + 1。在一個數組列表中存儲一個二叉搜索樹

目前我儘量不這樣做使用此代碼:

public static void arraywriter(TreeNode<String> node) throws FileNotFoundException 
{ 
    int pos = 1; 
    outputform.set(pos, node.getElement()); 
    pos = pos*2; 
    if(node.getLeft() != null) { 
     arraywriter(node.getLeft()); 
    } 
    pos = pos+1; 
    if(node.getRight() != null) { 
     arraywriter(node.getRight()); 
    } 
} 

請告訴我錯了我的邏輯是什麼?我將如何完成這項工作? 當前如果我使用這個,然後嘗試打印輸出內容(這是ArrayList的名稱,它的基本大小爲10,000)我得到:索引之一返回爲空,其餘爲「n」其中也是我初始化每一個元素。

謝謝!

+2

的一個問題是,你pos'目前設定'1',在這樣arraywriter'其價值開始將每次1。您可能希望將'pos'作爲參數添加到'arraywriter'中,以便可以使用'pos * 2'和'pos * 2 + 1'來調用它,然後您將首次調用'arraywriter', pos' of 1. – mikej

+1

嘿謝謝!我不相信我錯過了! – TheJavaKing

回答

0

您總是對pos使用固定值1,這意味着您一次又一次地覆蓋它。

考慮使用類似這樣:

public static void arraywriter(TreeNode<String> node, int pos) throws FileNotFoundException 
{ 
    outputform.set(pos, node.getElement()); 
    pos = pos*2; 
    if(node.getLeft() != null) { 
     arraywriter(node.getLeft(), pos); 
    } 
    pos = pos+1; 
    if(node.getRight() != null) { 
     arraywriter(node.getRight(), pos); 
    } 
}