javascript - 从文件路径构建树

标签 javascript java algorithm tree

我正在尝试从文件路径创建 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

有什么想法吗?创建树很容易,但我无法通过那个额外的条件......我假设我必须使用某种递归来添加项目并打破路径,因为我们发现某个路径有更多的 child (然后递归地做同样的事情?)。我应该使用某种特里吗?当同一个路径可以有多个文件时,它会工作吗?...谢谢!

最佳答案

让我们从一个简单的解决方案开始,按实际情况打印树:

function browseTree(node)
{
    // ...print node...

    // Visit recursively the children nodes:
    for (var child: node.children)
    {
        browseTree(child);
    }
}

现在,让我们修改它以“缩短”单个文件夹路径:

function browseTree(node)
{
    // Before printing, accumulate as many straight folders as possible:
    var nodeName=node.name
    while (hasJustOneFolder(node))
    {
        // This loop steps deeper in the tree:
        node=node.children[0]
        nodeName+="/"+node.name;
    }

    // ...print node...

    // Last, visit recursively the non-unique children nodes:
    for (var child: node.children)
    {
        browseTree(child);
    }
}

function hasJustOneFolder(node)
{
    return node.children.length==1 && node.children[0].isFolder();
}

关于javascript - 从文件路径构建树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32536836/

相关文章:

c - 游戏中的传球总数

javascript - Objective-C – 在可能修改文档内容后获取 UIWebView 动态 size.height

c# - 从最后一个叶子到根反向迭代 TreeView 节点的算法

c++ - 你如何在 C++ 中实现阶乘函数?

java - Vaadin 8.5.1-行更新后刷新网格

java - 无论构造函数签名如何,模拟类的属性

javascript - 如何获得数学函数的真实值

javascript - 从数独表 HTML 表生成数字数组

javascript - 我想在firstChild数组中找到特定元素

javascript - 通过按钮输出名称