Java 如何将PrintWriter对象用作函数参数,并将该函数用于递归树遍历

Java 如何将PrintWriter对象用作函数参数,并将该函数用于递归树遍历,java,recursion,binary-search-tree,printwriter,Java,Recursion,Binary Search Tree,Printwriter,我有一个二叉树遍历方法,在Java中以以下方式声明: public void printInPreorder(PrintWriter writer) 我需要在这个函数上使用递归来实现树遍历,以实现前序遍历。但是,我不确定如何将作为参数传递给函数的“writer”对象传递给函数。 (此writer对象已在另一个类中初始化,其中已设置文件名,而且,我无法更改此函数的参数,需要以相同的格式使用它)。如果有帮助,树将存储在1D数组中 有人能帮我吗 public void printInPreorder

我有一个二叉树遍历方法,在Java中以以下方式声明:

public void printInPreorder(PrintWriter writer)
我需要在这个函数上使用递归来实现树遍历,以实现前序遍历。但是,我不确定如何将作为参数传递给函数的
“writer”
对象传递给函数。 (此writer对象已在另一个类中初始化,其中已设置文件名,而且,我无法更改此函数的参数,需要以相同的格式使用它)。如果有帮助,树将存储在1D数组中

有人能帮我吗

public void printInPreorder(PrintWriter writer) {

   //find root node and print it
   //set visited as false for all other nodes
   //traverse the tree recursively to print the preorder traversal

}

您已经有了解决方案,只需将
writer
传递给递归调用中的方法即可

参数
writer
只是对堆上对象的引用,因此可以毫无问题地将其向下传递到调用堆栈

public void printInPreorder(PrintWriter writer) {
    ...    
    printInPreorder(writer);    
    ...    
}

您已经有了解决方案,只需将
writer
传递给递归调用中的方法即可。同意,但由于我是递归调用函数,如何传递现有值。例如,已访问(因此已打印)的节点不应重新访问。我使用一个布尔型数组来标记访问的节点,并在开始时将所有值设置为false。我如何递归调用函数,而不必在函数中将访问的节点重置为false?您说过不能更改方法的参数。您需要将此方法视为根调用,并编写第二个实际执行递归的私有助手方法。在该私有方法中,您可以传递writer和要检查和打印的节点。这是非常基本的,但是提供实际的代码会剥夺你自己解决问题的机会,并阻碍你的教育。谢谢Jim,我确实想到了这一点。但我想找到一种方法来实现它,而不必编写额外的函数。这个问题也仅仅是为了验证我对当前函数声明的理解,即没有其他方法可以做到这一点。谢谢你的帮助!这是不可能做到的。必须为每个递归调用指定要处理的节点。如果无法更改签名,那么在没有全局(类内)变量的情况下就无法实现所需的内容,在全局变量中使用下推堆栈来支持递归——这是一种非常奇怪的实现方式。谢谢你的确认,我想。我将继续为递归创建私有方法