当前位置: 首页 > 面试题库 >

如何以广度优先的方式递归列出某个位置的所有目录?

子车勇锐
2023-03-14
问题内容

在此,广度优先的列表很重要。而且,限制搜索的深度将是很好的。

$ find . -type d
/foo
/foo/subfoo
/foo/subfoo/subsub
/foo/subfoo/subsub/subsubsub
/bar
/bar/subbar

$ find . -type d -depth
/foo/subfoo/subsub/subsubsub
/foo/subfoo/subsub
/foo/subfoo
/foo
/bar/subbar
/bar

$ < what goes here? >
/foo
/bar
/foo/subfoo
/bar/subbar
/foo/subfoo/subsub
/foo/subfoo/subsub/subsubsub

如果可能的话,我想使用bash单线执行此操作。如果有一个javascript-shell,我会想像

bash("find . -type d").sort( function (x) x.findall(/\//g).length; )

问题答案:

find命令支持-printf可识别大量占位符的选项。

这样的占位符之一就是%d呈现给定路径相对于find起点的深度。

因此,您可以使用以下简单的单线:

find -type d -printf '%d\t%P\n' | sort -r -nk1 | cut -f2-

它非常简单,并且不依赖于像这样的繁重工具perl

怎么运行的:

  • 它在内部生成文件列表,每个文件显示为两行
  • 第一个字段包含深度,深度用于(反向)数字排序,然后切掉
  • 结果是简单的文件列表,每行一个文件,以最深优先顺序排列


 类似资料:
  • 在由具有指向父节点、兄弟节点和第一个/最后一个子节点的节点表示的通用树中,如: 是否可以在不使用任何其他帮助程序结构(如队列)的情况下执行迭代(非递归)广度优先(级别顺序)遍历。 所以基本上:我们可以使用单节点引用进行回溯,但不能保存节点集合。它是否能够完成是理论上的一部分,但更实际的问题是,它是否能够在不回溯大片段的情况下高效地完成。

  • 首先感谢大家看这个问题。 对于学校作业,我们应该创建一个BFS算法,并用它来做各种事情。其中一件事是,我们应该找到图的根节点和目标节点之间的所有路径。我不知道如何做到这一点,因为我找不到一种方法来跟踪所有备用路线,同时不包括副本/周期。 这是我的BFS代码: 如果能在概念上朝着正确的方向推进,将会受到极大的赞赏。 tl;dr 如何使用 BFS 查找两个节点之间的所有路径? 这是图表,因为我不知道如

  • 我正在尝试实现一个BFS函数,它将打印一个使用广度优先搜索遍历访问的有向图的节点列表。该函数必须以非递归方式实现,并且必须遍历图中的所有节点,因此,如果有多个树,它将以下列方式打印: 树1: a,b 树 2:d、e、h 树 3: ..... 我的主要困难是理解如果图形有多棵树,如何使BFS函数遍历所有节点,而不重新打印以前访问过的节点。

  • 图 图是一种数据结构,其中节点可以具有零个或者多个相邻的元素,两个节点之间的连接成为边。节点也可以成为顶点。 邻接表: 邻接表一般采用数组+链表的形式,数组表示各个顶点,链表中的元素表示该顶点与链表中的元素相连,与链表本身的指针没有关系。如上图 数组0 对应的链表1->3->4 表示0这个顶点与1 3 4这个顶点连接 数组1 表示1这个顶点与 0 2 4顶点相连以此类推 邻接矩阵和邻接表的区别 邻

  • 在这篇文章中,biziclop为非递归深度优先搜索算法插入了伪代码。 如果我们想使用递归DFS算法来检查节点的适当性,我们可以利用两个变体:pre-order(当一个节点在其子节点之前检查时)和post-order(当子节点在节点之前检查时),加上仅针对二叉树的第三个变体(顺序:左子树,然后节点,然后右子树)。 如果可能的话,我对这三个变体都很感兴趣,所以我试图修改biziclop的伪代码,以便获

  • 问题内容: 我有此功能,以递归方式打印目录中所有文件的名称。问题是我的代码很慢,因为它每次迭代都必须访问远程网络设备。 我的计划是先从目录中递归加载所有文件,然后再使用正则表达式遍历所有文件,以过滤掉我不需要的所有文件。有谁有更好的建议? 这只是稍后的测试,我将不使用这样的代码,而是将与高级正则表达式匹配的每个文件的路径和修改日期添加到数组中。 问题答案: 假设这是你将要编写的实际生产代码,那么我