Trie具有自定义插入和删除功能

时间:2017-09-01 19:23:16

标签: algorithm time-complexity trie

我需要为Trie数据结构创建四个自定义函数,而不会改变其O(n)复杂度:

  • MAKEDIR( “pathToDir”)
  • 使( “pathToFile”)
  • 删除( “pathToDir”)
  • forceDelete( “pathToDirOrFile”)

makeDir(“pathToDir”):仅当trie是有效路径时才添加路径

make(“pathToFile”):仅当路由器是有效路径时才添加路径(文件节点不能调用makeDir())

delete(“pathToDir”):仅当没有子目录时删除trie中的路径

forceDelete(“pathToDirOrFile”):删除路径及其子目录

例如,命令列表为:

makeDir("\dir");
makeDir("\dir\foo")
makeDir("\dir\foo\lol\ok"); /* incorrect path */
make("\dir\file");
makeDir("\dir\file\abc"); /* file can't have sub dirs */
delete("\dir"); /* has childs, incorrect */
delete("\dir\file");
forceDelete("\dir"); 

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

1 个答案:

答案 0 :(得分:1)

验证和拆分路径

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

特里

一旦你可以将路径拆分成碎片,就可以构建一个trie。保持字符串的边缘。例如,如果您有一个foo/bar路径,则会有3个节点和两个边:第一个(1> 2)标有foo而第二个(2) - > 3)标有bar

您可以在每个节点中存储一个标志,以指示它是常规文件还是目录。

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

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

高效遍历

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