【问题标题】:How do use PrintWriter object as a function argument and use that function for recursive tree traversal如何使用 PrintWriter 对象作为函数参数并将该函数用于递归树遍历
【发布时间】:2020-01-05 23:31:41
【问题描述】:

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

public void printInPreorder(PrintWriter writer)

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

有人可以帮我解决这个问题吗?

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 传递给递归调用的方法即可。

标签: java recursion binary-search-tree printwriter


【解决方案1】:

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

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

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

【讨论】:

  • 同意,但由于我是递归调用该函数,如何传递现有值。例如,不应重新访问已访问过的节点(因此,已打印)。我使用布尔类型数组来标记访问的节点,并在开始时将所有值设置为 false。如何递归调用函数,而不必在函数中将访问的节点重置为 false?
  • 嗯,你说你不能改变方法的参数。您需要将此方法视为根调用,并编写第二个实际执行递归的私有辅助方法。在该私有方法中,您可以将 writer 传递给要检查和打印的节点。这是非常基本的,但为您提供实际代码将剥夺您自己解决问题的机会并阻碍您的教育。
  • 谢谢吉姆,我确实想到了这一点。但我想找到一种方法来实现它,而不必编写额外的函数。这个问题也只是为了验证我对当前函数声明的理解,没有其他方法可以做到这一点。感谢您的帮助!
  • 无法做到。必须为每个递归调用提供要处理的节点。如果您无法更改签名,则您无法在没有全局(在类内)变量的情况下实现您想要的东西,在这些变量中您使用下推堆栈来支持递归——这是一种非常奇怪的实现方式。
  • 同意。谢谢你确认我想。我将继续为递归创建私有方法
猜你喜欢
  • 1970-01-01
  • 2019-08-02
  • 2013-07-23
  • 2010-12-08
  • 2016-06-04
  • 2016-02-22
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多