我编写了一个程序,它可以使用二叉搜索树进行操作,并且我有一个方法可以打印它的后序遍历。
public static void postOrderTrav(TreeNode node){
if(node != null){
postOrderTrav(node.getLeft());
postOrderTrav(node.getRight());
System.out.print(node.getVal() + " ");
}
}
但是,我也想将后序遍历打印到文件。在使用递归的方法中,我该如何做到这一点?我尝试过在不同的地方调用 writeToFile 方法,但它们总是只写出一个数字......
最佳答案
如果在 writeToFile
方法中你提到你总是打开、写入和关闭同一个文件,那么你基本上是在告诉它在每次打印时覆盖所有内容,导致文件只包含一个程序终止时的值。
如果您坚持以追加模式打开文件,则可以通过像这样打开文件(注意 true 参数)来克服这个问题:
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有关打印到文件的信息。您可以在打印输出时直接打印到文件,也可以将结果存储在数据结构(或字符串)中并在最后打印。
关于java - 将 BST 的遍历输出到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22466839/