使用toString以递归方式打印节点及其成员

时间:2017-11-20 19:05:03

标签: 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;
  }

1 个答案:

答案 0 :(得分:2)

问题看起来非常像图形/树遍历问题。查看您的预期输出,看起来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);
    }
}