【发布时间】:2012-04-25 18:19:55
【问题描述】:
在一次采访中,我被要求列出目录及其子目录中的文件名¹,既不使用递归,也不使用堆栈或队列。
由于我知道的唯一非递归方式使用堆栈,我无法回答这个问题。
面试官解释了解决方案,但我无法理解。我唯一记得的是它涉及两种方法而不是一种。
什么是允许在没有递归、没有堆栈或队列的情况下列出目录及其子目录中的文件的方法?
¹ 解决方案与语言无关。子目录列表由ListDirectories(string directoryPath) 方法提供,文件由ListFiles(string directoryPath) 提供。我们事先并不知道子目录的深度。
【问题讨论】:
-
您是否允许使用对添加/删除的元素施加与 FIFO 或 LIFO 不同的顺序(或无顺序)的 ADT?例如,您是否可以使用一个堆来存储所有按名称排序的未探索文件夹?严格来说,这既不是栈也不是队列。
-
你可以建立一个你正在探索的文件夹的树。您可以在每个节点上使用一个标志来标记该节点是否已访问。
-
@vitalik:您可以将树视为队列/列表的更高级版本。
标签: algorithm recursion stack queue