2015-04-04 46 views
-1

所以我試圖在文件中存儲二叉樹。我正在做這個將它存儲在文件中。在文件中存儲二叉樹

public String[] getTree() { 
    ArrayList<String> list = new ArrayList(); 
    String[] str; 
    preOrder(root, list); 
    str = list.toArray(new String[list.size()]); 
    return str; 
} 

private void preOrder(Node current, ArrayList list) { 
    if (current == null) { 
     list.add("&"); 
     return; 
    } 
    list.add(current.getValue()); 
    preOrder(current.getLeft(), list); 
    preOrder(current.getRight(), list); 
} 

基本上每個空節點我表示作爲&,並且每個節點通過線斷裂分離。有了這個數組,我將它發送到文件。現在,當程序再次啓動時,它會讀取該文件並將其放回數組中。然而,我有問題圍繞着這個過程包裹着我的頭,而且我讀的東西似乎都沒有幫助。這是我正在嘗試的當前算法,但它不適用於大型樹。

private void makeBinaryTree(String[] in) { 
    root = new Node(in[0]); 
    Node current = root; 
    boolean left = true; 
    for(int i = 1; i < in.length; i++){ 
     if(!in[i].equals("&")){ 
      if(left){ 
       Node toAdd = new Node(in[i]); 
       toAdd.setParent(current); 
       current.setLeft(toAdd); 
       current = toAdd; 
      }else{ 
       Node toAdd = new Node(in[i]); 
       toAdd.setParent(current); 
       current.setRight(toAdd); 
       current = toAdd; 
       left = true; 
      } 

/*   }else if(left && in[i].equals("&")){ 
        left = false; 
      */}else if(!left && in[i].equals("&")){ 
      left = false; 
      current = current.getParent(); 
      current = current.getParent(); 
     }else if(i+1 >= in.length){ 
     }else if(in[i].equals("&") && in[i+1].equals("&")){ 
      current = current.getParent(); 
      left = (!left); 
      i++; 
     } 
    } 

} 

感謝您的幫助。

回答