我需要为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来检查它是否存在,并且其节点是目录,而不是一个常规文件。
有效的遍历
您可以将边缘存储在哈希表中,将字符串映射到节点。