在一次采访中,我被要求列出目录及其子目录中的文件名,而不同时使用递归,堆栈或队列。
由于我所知道的唯一非递归方式是使用堆栈,我无法回答这个问题。
面试官解释了解决方案,但我无法理解。我唯一记得的是它涉及两种方法而不是一种方法。
这种方法是什么允许列出目录及其子目录中的文件而没有递归,没有堆栈或队列?
¹该解决方案与语言无关。子目录列表由ListDirectories(string directoryPath)
方法提供,文件由ListFiles(string directoryPath)
提供。我们事先并不知道子目录的深度。
答案 0 :(得分:3)
在深度优先搜索注释中,当前路径基本上用作堆栈。以深度优先的方式列出名称,按照您的预期进行,但不要记录堆栈...当您在目录中列出文件时,您可以通过注意最后一个目录是什么来“弹出”堆栈你在那里然后从父目录中的那一点继续。
答案 1 :(得分:1)
尝试这样的事情(伪代码):
baseDirectory = "/usr"
list = [baseDirectory] // list of directories to traversal
files = []
while (list not empty) {
d = list.getFirst(); // get directory
directories = ListDirectories(d);
files.add(ListFiles(d)); // add all files from current directory
list.add(directories); //add all directories from current directory to traversal
list.remove(d); // remove traversed dir
}
我们只使用列表:)但这种方法非常类似于堆栈/队列解决方案