如何在java中通过树查询搜索

如何在java中通过树查询搜索,java,recursion,tree,Java,Recursion,Tree,我试图通过返回其真实名称children.get(0).children.get(0).data来返回数据为“directory”的节点字符串列表 到目前为止,当我遍历树时,它可以找到节点并添加我要查找的数据,但是当我在列表中添加这些字符串并在列表中添加System.out.println时,列表会发生变化。它可以重置、删除字符串等 就在return语句之前,我打印了列表。它不是被归还的东西。 !!!beforeoutput[Pictures,Pictures2.0,Pictures,Pictu

我试图通过返回其真实名称children.get(0).children.get(0).data来返回数据为“directory”的节点字符串列表

到目前为止,当我遍历树时,它可以找到节点并添加我要查找的数据,但是当我在列表中添加这些字符串并在列表中添加System.out.println时,列表会发生变化。它可以重置、删除字符串等

就在return语句之前,我打印了列表。它不是被归还的东西。 !!!beforeoutput[Pictures,Pictures2.0,Pictures,Pictures2.0]//打印列表 !!!beforeoutput[电影和图片,电影,图片]//打印列表 GetDirectory[电影和图片,电影,图片]//实际输出

有人让我在全局范围内定义列表,我这样做了,但实际上什么也没发生

我想我要问的是如何正确地查询树。我知道它是递归的,但是当在列表中添加值时,它会把列表弄乱。


我的方法的代码+控制台+一个示例树发布在这里:

我不明白您在这里实际想做什么,因为您的代码凌乱而繁琐。您需要了解,当您从递归函数调用返回值时,它将返回到以前调用过的点

如果你有这样的结构

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

}
List allDirectories=new ArrayList();
GetDirectory(所有目录);
私有void getDirectories(列出所有目录){
//以某种方式获得下一个节点
Node=getNextNode();
//如果下一个节点为空,或终止节点:返回
if(node==null)返回;
add(node.getData());
GetDirectory(所有目录);
}
换句话说,尝试将列表作为参数传递给方法,不要在函数调用开始时重置它。

要将问题标记为“已解决”,请在下面添加一个答案,然后用旁边的绿色复选标记“接受”。