Java递归和保留信息

时间:2015-03-22 20:13:38

标签: java loops recursion

我有一个方法需要循环遍历嵌套元素并返回一个字符串,该字符串应该通过树的连接而连接起来。从搜索,我相信递归将是一个更容易的方法,但我无法得到所需的结果。

数据结构:

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);
        }

2 个答案:

答案 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。