gpt4 book ai didi

javascript - 算法 - 没有空文件夹的动态 TreeView (折叠的节点路径)

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:24:13 26 4
gpt4 key购买 nike

我正在尝试从文件路径创建 TreeView ,可以动态添加和删除,例如:

A/B/C/D/file1.txt
A/B/D/E/file2.txt
A/B/D/G/file3.txt
A/B/D/G/file4.txt

我已经创建了一棵如下所示的树:

A
|---B
|---C
| |---D
| file1.txt
|---D
|---E
| file2.txt
|---G
file3.txt
file4.txt

然而,我的树要求没有子项(文件)的路径应该折叠在一个节点中。对于上面的路径,它将产生:

A/B
|---C/D
file1.txt
|---D
|---E
| file2.txt
|---G
file3.txt

关于我将如何去做的任何建议?我假设我在添加项目和打破路径时必须使用某种递归,因为我们发现某个路径有更多的 child (然后递归地做同样的事情?)。任何已知的算法?

我还需要支持删除。所以如果我删除“A/B/D/G/file3.txt”和“A/B/D/G/file4.txt”,它会导致 D 成为一个空文件夹,所以我会向上移动 E 和我会留下:

A/B
|---C/D
file1.txt
|---D/E
file2.txt

所以你看到树节点可以根据我们动态添加/删除的路径折叠/展开。

有什么想法吗?我正在尝试在 JS 中实现它..

谢谢!

最佳答案

首先,我认为您应该在每次插入/删除时重新计算您的树。

所以现在的问题是为你的树构建这个树表示。

想法是您应该为文件和目录标记节点。然后,如果有一个或多个子文件或严格超过一个文件夹节点,则应将每个文件夹节点标记为 True(此标记的含义是您应跳过尾行和制表并添加斜线)。例如,您可以使用 DFS 算法来做到这一点(对于每个节点检查所有子节点并标记该节点)。

然后你应该输出或绘制你的树,你可以在保持当前深度的同时使用前序遍历来完成。

如果当前节点没有mark 则输出你的文件夹名称并添加结束行然后输出制表符乘以当前节点的深度+1。然后你应该为 child 调用你的函数并传递深度+1。

如果当前节点有mark,那么除了跳过endline 和末尾的制表符外,你应该输出所有相同的内容,而是你应该添加'/'。此外,您应该只传递深度(不加一)以进行递归调用以正确列出子项。

关于javascript - 算法 - 没有空文件夹的动态 TreeView (折叠的节点路径),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32519838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com