我一直在阅读树数据结构来模拟问题。我需要构建一个数据的内存表示,这与文件系统中的文件夹/文件表示非常相似(我并不暗示存储在磁盘中的实际文件,而是类似于资源管理器的结构)。树可能最多10个深度中间节点可能只有中等数量的子节点(比如10个),但可能有数千个叶子节点。[就像文件夹和文件中的数千个文件是叶子节点]
一些想法
请帮助您的体验。我应该自定义树或任何合适的数据结构(不是特定于编程语言)
答案 0 :(得分:3)
您有两种不同的节点:文件和文件夹。
文件夹节点包含子集的集合(或映射),子节点本身可能是文件或文件夹。
或者,您可能更喜欢文件夹节点包含一组文件和一组文件夹。
对于集合,只需使用您喜欢的有序集合表示(可能是您使用的任何语言附带的集合)。根据您的具体情况,您可能更愿意使用地图。
答案 1 :(得分:1)
使用两个独立的数据结构:
并将这两者联系起来。
注意:
或使用:
Node:
Node* Left_Most_Child_Folder;
Node* Right_Sibling_Folder;
BST_Node* Files_Root;
答案 2 :(得分:1)
在典型的文件系统中,“目录树”和搜索树不是一回事,通常是单独维护的。 “目录树”告诉您文件夹具有哪些文件/子文件夹,或者指向特定文件的路径,只是反映用户如何组织文件并且仅对用户有用。另一方面,搜索树维护所有文件的全局索引,以便于快速搜索。
例如,您可以实现类似Linux的文件系统,其中文件夹是记录其包含的其他文件/文件夹的指针的文件。同时你维护一个B +树,它将每个文件指针都作为一个叶子。 B +树的平衡条件与用户组织文件夹的方式无关。
答案 3 :(得分:0)
这样做的一种方法是使用二叉树的二叉树。例如:
Node
Node* Children;
Node* Left;
Note* Right;
树的根是Node*
。
这样可以轻松遍历并快速插入和删除节点。当然,前提是您知道要插入节点的级别的路径,或者要知道要删除的节点的路径。但既然你表明你想要一个类似于Explorer的模型,我认为找到一个特定的水平不会造成问题。
在特定级别搜索节点就像搜索二叉树一样简单。
如果没有更多关于你想要建模的信息,那就是我能做的最好的事情。