我有一个方法需要循环遍历嵌套元素并返回一个字符串,该字符串应该通过树的连接而连接起来。从搜索,我相信递归将是一个更容易的方法,但我无法得到所需的结果。
数据结构:
root
child 1
child 1.1
child 1.2
child 2
child 2.1
child 2.2
child 2.2.1
child 3
好的,这就是主意。我需要循环从子项开始,通过列出从子起点到根的元素来查找到根的路径。
例如:我正在寻找孩子2.2.1。回答应该是:
child 2.2.1,child 2.2, child 2, root
Private String loopthrough(String name, String needed LinkedList myList)
List<String>Children = new ArrayList<String>();
for (String child : children)
{
if (child.isParentOf(needed ))
{ name+=child.getName
}
else{
goneThrough.add(child);
}
}
children = goneThrough;
for (String child : children)
{
loopthrough(child);
}
答案 0 :(得分:0)
您可以通过在下降树时按下所需路径上的节点来避免递归,这样它们就会按照您希望显示的顺序弹出。
答案 1 :(得分:0)
使用StringBuilder(或PrintWriter或StringWriter)作为输入输出参数。
StringBuilder sb = new StringBuilder():
tree.dumpTree(sb);
System.out.println(sb);
String s = sb.toString();
这具有额外的优势,即每次调用都不会发生字符串与新字符串的串联。
在这种情况下,您可以在从递归返回时构建结果。我仍然不明白你的数据结构是什么,以及正确的参数是什么。使用String:
private String loopthrough(String name, String needed, List<?> myList)
{
if (name.equals(needed)) {
return name;
}
for (String child : children) {
String partialResult = loopthrough(child, ...);
if (partialResult != null) {
return name + " " + partialResult;
}
}
return null; // Not found in this subtree.
}
当然,我们无法知道您正在使用的数据结构。我假设children
是直接的子节点。在递归中,人们宁愿解析节点,名称为String。