我已经制作了一个用二元搜索树做事的程序,并且我有一个方法可以打印它的后序遍历。
public static void postOrderTrav(TreeNode node){
if(node != null){
postOrderTrav(node.getLeft());
postOrderTrav(node.getRight());
System.out.print(node.getVal() + " ");
}
}
但是,我也希望将后期遍历打印到文件。我怎么做这个,在这个使用递归的方法?我已尝试在各个地方调用writeToFile方法,但它们总是只写出一个数字......
答案 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");
}
}