带有自定义插入和删除功能的trie



我需要为TRIE数据结构创建四个自定义功能,而不会更改其O(n)复杂性:

  • makedir(" pathtodir")
  • make(" pathtofile")
  • delete(" pathtodir")
  • forceedelete(" pathtodirorfile")

makedir(" pathtodir"):仅当它是有效的路径

时才添加路径

make(" pathtofile"):仅当它是有效路径(文件节点无法调用makedir())

时,才能在Trie中添加路径

delete(" pathtodir"):仅在没有孩子dirs dirs

的情况下删除Trie的路径

forceedelete(" pathtodirorfile"):删除路径及其孩子dirs

例如,命令列表将是:

makeDir("dir");
makeDir("dirfoo")
makeDir("dirfoololok"); /* incorrect path */
make("dirfile");
makeDir("dirfileabc"); /* file can't have sub dirs */
delete("dir"); /* has childs, incorrect */
delete("dirfile");
forceDelete("dir"); 

有人知道如何识别节点指示文件的路径吗?实施这些功能的最佳方法是什么?

验证和分割路径

它是特定于操作系统的,因此只需选择适用于目标系统路径的库。

Trie

一旦您可以将路径分成部分,就可以构建一个Trie。将字符串保持在其边缘。例如,如果您有foo/bar路径,则将有3个节点和两个边缘:第一个节点(1-> 2)用foo标记,第二个节点(1-> 2)用bar标记了第二个节点(2-> 3)。p>您可以在每个节点中存储一个标志,以指示它是常规文件还是目录。

要检查目录是否为空,只需确保其节点没有孩子。

要检查是否可以创建目录/文件,请取其基本dir(路径的所有部分除了最后一个部分),请通过从根中遍历trie来检查它是否存在,并且其节点是目录,而不是一个常规文件。

有效的遍历

您可以将边缘存储在哈希表中,将字符串映射到节点。

最新更新