在文件结构中找到最高共同的兄弟分支

时间:2016-02-10 06:14:36

标签: algorithm

我有一个包含文件结构的数组,我需要找到最高的关系。我有一个返回树结构的脚本,我需要删除重复项。

这条路径'将由' /'。

分开
var array = [
        '2/7',
        '2/6',
        '2/8/4/6',
        '1/3',
        '1/4',
        '1',
        '1/5/1/4',
        '2',
        '3/test'
    ]

这应输出:

var return = [
        '1',
        '2',
        '3/test'
    ]

我将如何执行此操作?

我正在扫描已删除目录的目录。让我们说我删除" 2",但我的监控脚本注意到整个分支已经消失:2,2 / 7,2 / 6,2 / 8/4/6和它报告它,而不是在它们来时删除dirs,我存储要在数组中删除的结构。我需要返回没有重复的数组删除远程机器上的相同目录

2 个答案:

答案 0 :(得分:3)

所以这是你如何实现这一目标的。创建一个虚构的根。将其标记为白色。

现在浏览每个元素并从根目录填充它。例如,'2/8/4/6'将创建路径root -> 2 -> 8 -> 4 -> 6。每个顶点都是白色,最后一个是黑色。

如果你这样做,你会得到这样的树:

enter image description here 现在从root进行DFS你会遇到黑色顶点。您的路径将是:

root -> 2
root -> 1
root -> 3 -> test

忽略根,你得到你想要的东西。

答案 1 :(得分:1)

您可以使用特里数据结构来查找唯一的前缀。现在,trie使用了大量内存,因此您可能需要对其进行调整。

  1. 从一个空的特里开始。
  2. 遍历输入数组中每个路径的trie。
    • 从root开始,如果不存在,则将路径的第一个字符添加为root的新子项。否则就转移到孩子身上。
    • 重复此过程,直到字符/
    • 此后有两种情况可能
      1. 正在穿越的特里的分支已经到了尽头。路径也已到达终点,或者还剩下一些字符。无论哪种方式,您都可以删除剩余路径,并处理输入中的下一个路径。
      2. 路径已到达终点,但是trie的分支有子节点。在这种情况下,您可以截断当前trie分支的所有子项。
  3. 我没有详细说明处理/分隔符。你必须仔细考虑它。