以递归方式列出目录和子目录中的文件而不使用堆栈/队列

时间:2012-04-13 11:25:42

标签: algorithm recursion stack queue

在一次采访中,我被要求列出目录及其子目录中的文件名,而不同时使用递归,堆栈或队列。

由于我所知道的唯一非递归方式是使用堆栈,我无法回答这个问题。

面试官解释了解决方案,但我无法理解。我唯一记得的是它涉及两种方法而不是一种方法。

这种方法是什么允许列出目录及其子目录中的文件而没有递归,没有堆栈或队列?


¹该解决方案与语言无关。子目录列表由ListDirectories(string directoryPath)方法提供,文件由ListFiles(string directoryPath)提供。我们事先并不知道子目录的深度。

2 个答案:

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

我们只使用列表:)但这种方法非常类似于堆栈/队列解决方案