如何在java中查询树中的搜索

时间:2013-11-17 20:40:55

标签: java recursion tree

我试图通过将其真实名称作为children.get(0).children.get(0).data

返回其数据为“directory”的节点的字符串列表。

到目前为止,当我浏览树时,它可以找到节点并添加我正在寻找的数据,但是当我在List中添加这些字符串并将它们放入System.out.println列表时,列表会发生变化。它可以重置,删除字符串等。

在return语句之前,我打印出列表。它不是归还的。

!!! beforeoutput [图片,图片2.0,图片,图片2.0] //打印列表

!!! beforeoutput [电影和图片,电影,图片] //打印列表

getdirectories [电影和图片,电影,图片] //实际输出

有人告诉我在全球范围内定义列表,我做了,实际上没有任何事情发生。

我想我要求的是如何通过树正确查询。我知道它是递归的,但是当在列表中添加值时,它会混淆列表。

我的方法代码+控制台+示例树在此处发布:http://pastebin.com/9nXvcCNS

1 个答案:

答案 0 :(得分:0)

我不明白你在这里想要做什么,因为你的代码很麻烦和挑剔。您需要了解当从递归函数调用返回值时,它会将其返回到先前调用它的位置。

如果你有这样的结构,

a 
| - b 
    | - c

其中每个项目都表示为

class Node{
    String data;
    Node nextNode;

}

并希望您的列表包含字符串“a”,“b”和“c”,您必须写下这样的内容:

List<String> allDirectories = new ArrayList<String>();
getDirectories(allDirectories);

private void getDirectories(List<String> allDirectories) {
     //somehow get next node
     Node node = getNextNode();
    //if next node is null, or terminating node: return
    if (node == null) return;
    allDirectories.add(node.getData());
    getDirectories(allDirectories);

}

换句话说,尝试将列表作为参数传递给方法,并且不要在函数调用开始时重置它。