有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用toString递归打印节点及其成功者

考虑到节点。爪哇:

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) 个答案

  1. # 1 楼答案

    这个问题看起来很像一个图/树遍历问题。从您的预期输出来看,DFS(深度优先搜索)遍历似乎是一个不错的选择

    这里需要注意的关键点是,随着我们向更深的方向移动,数量\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);
        }
    }