java - 将 void 返回到文本文件的打印方法
问题描述
问这个问题我感觉像个菜鸟,但是在我当前的驱动程序中,我已经使用迭代器成功地将树的预排序打印到文本文件中。我不知道如何打印我的递归方法,因为我不能将它们放入 println 语句中,因为它们是无效方法。我知道我应该让该方法将编写器作为参数,但不知道该怎么做(驱动程序的最后几个 println 语句)。任何帮助表示赞赏!
司机:
package driver;
import java.io.*;
import java.util.*;
public class Driver {
private static Scanner file;
static PrintWriter outputFilePrinter;
static Scanner inputFileScanner;
public static void main(String[] args) throws FileNotFoundException {
Scanner inFile; //Declaring scanner obj
PrintWriter printWriter = new PrintWriter("output.txt"); //Text file where results are printed to
inFile = new Scanner(new File("input.txt")); //Text file where student names and associated number are read from
BinarySearchTreeInterface<String> aTree = new BinarySearchTree<>() {}; //Giving access to BinarySearchTree methods
while (inFile.hasNext()) { //Scans input file
String name = inFile.nextLine(); //Assigns contents to string obj
aTree.add(name); //Add string to a tree
} //End while
Iterator<String> traverse = aTree.getPreorderIterator(); //Using iterator to print tree in an "postorder" fashion
while (traverse.hasNext())
printWriter.println(traverse.next()); //Prints tree
System.out.println("Postorder Recrusive: ");
aTree.postorderTraverse();
System.out.println("");
System.out.println("Inorder Recursive: ");
aTree.inorderTraverse();
printWriter.close(); //Closes file
} //End Main
} //End Driver
我试图打印的递归方法:
public void inorderTraverse() {
inorderTraverse(root);
}
public void inorderTraverse(BinaryNode<T> node) {
if (node != null) {
inorderTraverse(node.getLeftChild());
System.out.println(node.getData());
inorderTraverse(node.getRightChild());
}
}
public void postorderTraverse() {
postorderTraverse(root);
}
public void postorderTraverse(BinaryNode<T> node) {
if (node != null) {
postorderTraverse(node.getLeftChild());
postorderTraverse(node.getRightChild());
System.out.println(node.getData());
}
}
解决方案
您可以将遍历代码更改为
public void inorderTraverse(PrintWriter printWriter) {
inorderTraverse(root, printWriter);
}
public void inorderTraverse(BinaryNode<T> node, PrintWriter printWriter) {
if (node != null) {
inorderTraverse(node.getLeftChild(), printWriter);
printWriter.println(node.getData());
inorderTraverse(node.getRightChild(), printWriter);
}
}
public void postorderTraverse(PrintWriter printWriter) {
postorderTraverse(root, printWriter);
}
public void postorderTraverse(BinaryNode<T> node, PrintWriter printWriter) {
if (node != null) {
postorderTraverse(node.getLeftChild(), printWriter);
postorderTraverse(node.getRightChild(), printWriter);
printWriter.println(node.getData());
}
}
甚至
public void inorderTraverse(Consumer<T> consumer) {
inorderTraverse(root, consumer);
}
public void inorderTraverse(BinaryNode<T> node, Consumer<T> consumer) {
if (node != null) {
inorderTraverse(node.getLeftChild(), consumer);
consumer.accept(node.getData());
inorderTraverse(node.getRightChild(), consumer);
}
}
public void postorderTraverse(Consumer<T> consumer) {
postorderTraverse(root, consumer);
}
public void postorderTraverse(BinaryNode<T> node, Consumer<T> consumer) {
if (node != null) {
postorderTraverse(node.getLeftChild(), consumer);
postorderTraverse(node.getRightChild(), consumer);
consumer.accept(node.getData());
}
}
并像这样调用第二个变体:
aTree.postorderTraverse(printWriter::println);
aTree.postorderTraverse(System.out::println);
推荐阅读
- python - 使用 Cloud Function 将数据加载到 Google Cloud Storage 和 BigQuery
- r - 如何在字符串末尾拆分数值,然后将 1.4 x 10*4 转换为 1.4E4?
- postgresql - 运行 Chainlink 节点 - 远程 DATABASE_URL 配置 PostgreSQL 问题
- python - 如何在嵌入上制作多个网址?(discord.py)
- swiftui - 如何在 SwiftUI 中使用 @AppStorage 存储 EnumTypes
- python - 如何识别图像中的虚线?
- python - 在Flask中建立many2many关系时出错
- python - 在python中使用for循环时出现JSONDecodeError
- excel - VBA:完成矩阵
- excel - 没有此类元素错误。使用 VBA 找不到 XPath 的元素