0

所以我正在尝试将二叉树存储在文件中。我这样做是为了将它存储在文件中。

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++;
        }
    }

}

感谢所有的帮助。

4

1 回答 1

0

您可以序列化存储您的对象(树)。读这个:

http://www.mkyong.com/java/how-to-write-an-object-to-file-in-java

但是像这样存储和装载大树并不是一个好主意。

于 2015-04-04T04:22:09.170 回答