考虑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;
}
答案 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);
}
}