algorithm - 在不使用递归/堆栈的情况下打印给定文件夹和子文件夹中的所有文件

标签 algorithm data-structures language-agnostic

我最近接受了一家知名公司的软件开发人员职位面试,这是被问到的问题之一:

“给定以下方法:

List subDirectories(String directoryName){ ... }; 
List filesInDirectory(String directoryName) { ... };

顾名思义,第一种方法返回输入目录 ('directoryName') 中直接子目录的名称列表,第二种方法返回此文件夹中所有文件的名称列表。

打印文件系统中的所有文件。"

我想了想,给了面试一个很明显的递归解法。然后她告诉我不要递归。由于递归使用调用堆栈,我告诉她我将使用辅助堆栈来代替,此时她告诉我也不要使用堆栈。不幸的是,我无法想出解决方案。我确实问过如何在没有递归/堆栈的情况下完成它,但她没有说。

如何做到这一点?

最佳答案

您想使用队列和 BFS 算法。

我想一些伪代码会很好:

files = filesInDirectory("/")
foreach (file in files) {
   fileQ.append(file)
}

dirQ = subDirectories("/")
while (dirQ != empty) {
   dir = dirQ.pop
   files = filesInDirectory(dir)
   foreach (file in files) {
      fileQ.append(file)
   }
   dirQ.append(subDirectories(dir))
}

 while (fileQ != empty) {
   print fileQ.pop
 }

关于algorithm - 在不使用递归/堆栈的情况下打印给定文件夹和子文件夹中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13132679/

相关文章:

java - 有没有更好的方法来转义这个字符串?

data-structures - 相关数据结构

java - 为什么二叉堆是树结构?

使用动态编程进行字符串操作

Facebook 拼图(概率)

c++ - 如何设计一个固定TIME长度的循环缓冲区?

algorithm - Cormen WreSTLer 的竞争 BFS

java - 为什么我的程序为数组的每个索引创建相同的链表?

javascript - Clojure 启发的传感器可以使用 HM 类型系统进行类型化吗?

language-agnostic - n 位整数中有多少个 1?