2015-04-04 75 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++; 
     } 
    } 

} 

感谢您的帮助。

回答