java - 使用 toString 递归打印 Node 及其后继者

标签 java recursion

考虑到 Node.java:

public class Node {
  private int value;
  private ArrayList<Node> successors; 

我想创建一个 toString 方法,以递归方式打印后继及其后继,依此类推:

( A ) 
  -> ( B )
         -> ( C )
  -> ( D )

我不知道如何将 \t 添加到 toString 方法以获取打印:

  public String toString() {
    StringBuilder successorsString = new StringBuilder();

    for (Node sucessor : this.successors  ) {
      successorsString.append("\n\t  ->"+ sucessor );
    }
    return "( " + this.value +" )" + successorsString;
  }

最佳答案

这个问题看起来非常像图/树遍历问题。看看您的预期输出,看起来 DFS(深度优先搜索)遍历将是正确的选择。

这里要注意的关键点是,随着我们深入,\t 的数量会增加。因此,深度和要放置的\t 数量之间存在相关性。

解决此问题的一种方法是在递归时使用深度变量,然后在执行之前将\t 插入到结果字符串中多次

public String toString() {
    StringBuilder res = new StringBuilder();
    toStringRec(this, 0, res);
    return res.toString();
}


 public static void toStringRec(Node node, int depth, StringBuilder result){
    if(node==null)
        return;

    // adding self to result
    result.append("\n");
    for(int i=0; i<depth; i++)
        result.append("\t");
    result.append(node.val);

    for (Node sucessor : node.successors  ) {
      toStringRec(sucessor, depth+1, result);
    }
}

关于java - 使用 toString 递归打印 Node 及其后继者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47399282/

相关文章:

java - 使用 Java IO 搜索并打印特定行

javascript - 没有 sort() 的组合算法

Java函数设置未知类型的数组列表

c# - 如何创建一个仅使用加法和 2 个变量进行除法的递归函数

python - 生成器表达式因最大递归深度而失败

PHP 将变量传递给 array_walk_recursive

parsing - 跳出深度递归函数调用

java - 获取 "?"的 ASCII 值

java - 各种版本的Android和XPath支持

java - 应用程序属性作为静态变量或带有单例的实例变量