在目录中使用先序、后序和中序遍历递归搜索文件

3

当我编写递归地在目录中搜索文件的代码时,例如我使用以下方法:

public void list(File file) {
    System.out.println(file.getName());
    File[] children = file.listFiles();
    for (File child : children) {
        list(child);
    }
}

如果我需要展示它的前序遍历、中序遍历和后序遍历,我该怎么做?

我不太能将树的遍历与这个文件搜索联系起来。


这与文件搜索关系不大。你知道如何进行树的前/后序遍历吗? - Oliver Charlesworth
此外,中序遍历只对二叉树有意义。 - Oliver Charlesworth
这个链接讲解得不够清楚吗? - Bernhard Barker
@OliCharlesworth 我知道这三种遍历方式,但我想将它们与这个文件搜索上下文联系起来。 - Sunny Gupta
@Cam:如果你知道如何编写先序/后序树遍历的基本思路,那么我不明白为什么在这种情况下会有问题应用它。 - Oliver Charlesworth
2个回答

1

你的代码是前序遍历,因为父节点在子节点之前被处理(打印)。如果你将打印移到循环后面,它就是后序遍历。在这种情况下,中序遍历没有太多意义。如果你有一个二叉树,那么处理每个子节点之间处理父节点时它就是中序遍历。


谢谢您的快速回答,在这种情况下是否可能进行顺序遍历? - Sunny Gupta
“可能”是的。例如,在处理第一个子元素后,您可以处理父元素。但这样做没有意义。 - Eduardo
如果您有一个二叉树,其中左子树是小于父节点的项目,右子树是大于父节点的项目,则中序处理将按顺序打印树。这是使用它的示例。但在这里,这没有意义。 - Eduardo

0
你正在进行的是前序遍历。
这是后序遍历:
public void list(File file) { 
    if(file == null)return;  
    File[] children = file.listFiles();
    for (File child : children) {
        list(child);
    }
   System.out.println(file.getName());
}

而中序遍历对于一般树没有一个自然的定义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接