人们谈论trees
,是的,我可以理解tree
的概念以及traversing
conceptually
的方式。有趣的是,在binary search tree
中,搜索时间为O(log N)
。
现在,我确定folders in my system
的文件结构为not going to be modified
,但new files are added often
除外。
我可以想象,如果我构建一个表示文件夹结构的二叉搜索树,我可以使用O(log N)
中的文件名进行搜索。我知道这可以通过内置的.NET方法非常有效地完成,但我试图看到使用树的真实用例场景。
MSDN here告诉'Trees are common data structures because many real-world problems exhibit tree-like behavior. For example, any sort of hierarchical relationship among people, things, or objects can be modeled as a tree.
,但问题是我无法将上述要求建模到树上?
问题是:
I cannot visualize how to connect the BST concept and my requirement
。我看到的每个二叉树样本,只是通过向节点添加一些简单的整数并遍历它来解释。
如何为目录遍历构建树? (请 - 一些代码或伪代码,而不仅仅是理论答案!)
如何存储已构建的树?
(至于从我的文件夹结构中获取所有文件,我使用我的代码here)
答案 0 :(得分:1)
我认为你从根本上混淆了两个不相关的概念。树是具有与之关联的层次结构的数据结构。二叉搜索树是一种树的数据结构,但其形状受到更多限制。每个节点必须有零个,一个或两个子节点。每个节点都存储一些密钥,并且树具有以下属性:对于每个节点,其左子树中的节点中的所有密钥都小于原始节点的密钥,并且其右子树中的节点中的所有密钥都大于原始节点的密钥。
虽然你可以使用一些技巧来将目录树表示为二叉搜索树,但这样做是错误的,因为这是工作的错误工具。目录树可以具有任意大的分支因子,并且不以任何排序顺序存储。我建议首先对一般树进行一些阅读,而不仅仅是二元搜索树,以便更好地理解区别,以及有关如何表示任意树结构的更多信息。
至于如何实际构建树 - 您可能希望研究深度优先搜索或广度优先搜索算法,这可能是探索目录结构和构建目录树的绝佳选择。 / p>
希望这有帮助!