输出BST到文件的遍历

时间:2014-03-17 22:34:10

标签: java file

我已经制作了一个用二元搜索树做事的程序,并且我有一个方法可以打印它的后序遍历。

public static void postOrderTrav(TreeNode node){
    if(node != null){
        postOrderTrav(node.getLeft());
        postOrderTrav(node.getRight());
        System.out.print(node.getVal() + " ");
    }
}

但是,我也希望将后期遍历打印到文件。我怎么做这个,在这个使用递归的方法?我已尝试在各个地方调用writeToFile方法,但它们总是只写出一个数字......

2 个答案:

答案 0 :(得分:0)

如果你提到的writeToFile方法总是打开,写入和关闭同一个文件,你基本上是告诉它每次打印都要覆盖所有内容,导致文件只包含一个值程序终止。

你可以通过以附加模式打开文件来解决这个问题,如果你坚持以这种方式使用你的函数,打开这样的文件(注意真正的参数):

FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);

但是,为每次写入打开和关闭文件效率非常低,因此更好的方法如下:

假设你从main调用你的方法,如果你一次打印一个元素,你可以这样做:

private static BufferedWriter bw;

public static void main(String[] args) {

    File file = new File("/your/file/path/<filename>");

    // if file doesnt exists, then create it
    if (!file.exists()) {
        file.createNewFile();
    }

    FileWriter fw = new FileWriter(file.getAbsoluteFile());
    BufferedWriter bw = new BufferedWriter(fw);

    postOrderTrav(node);

    bw.close();
}

在您的方法中,您将拥有:

public static void postOrderTrav(TreeNode node){
    if(node != null){
        postOrderTrav(node.getLeft());
        postOrderTrav(node.getRight());
        System.out.print(node.getVal() + " ");
        bw.write(node.getVal() + " ");
    }
}

查看here有关打印到文件的信息。您可以在打印到输出时直接打印到文件,也可以将结果存储在数据结构(或字符串)中并在最后打印。

答案 1 :(得分:0)

最好将Apache common用于更简单的任务,以尽量减少行数,并且只需传递StrinBuilder类。

import org.apache.commons.io.FileUtils

public static printPostOrderTravInFiles(TreeNode node, String fileName) throws IOException{
  StringBuffer sb = new StringBuffer();
  postOrderTrav(node, sb);
  FileUtils.writeStringToFile(sb.toString());
}


public static void postOrderTrav(TreeNode node, StringBuffer sb){
    if(node != null){
        postOrderTrav(node.getLeft());
        postOrderTrav(node.getRight());
        sb.append(node.getVal() + " \n");
    }
}