我需要为Trie数据结构创建四个自定义函数,而不会改变其O(n)复杂度:
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");
有没有人知道如何识别节点指示文件的路径?实现这些功能的最佳方法是什么?
答案 0 :(得分:1)
它是特定于操作系统的,因此只需选择适用于目标系统路径的任何库。
一旦你可以将路径拆分成碎片,就可以构建一个trie。保持字符串的边缘。例如,如果您有一个foo/bar
路径,则会有3个节点和两个边:第一个(1> 2)标有foo
而第二个(2) - > 3)标有bar
。
您可以在每个节点中存储一个标志,以指示它是常规文件还是目录。
要检查目录是否为空,只需确保它的节点没有子节点。
要检查是否可以创建目录/文件,请获取其基本目录(除最后一个之外的路径的所有部分),通过从根遍历您的trie并且其节点是目录来检查它是否存在,而不是一个普通的文件。
您可以将哈希表中的边存储为将字符串映射到节点。