[英]What is the best data structure for tree-like data of fixed depth in C#?
具有三个级别的树状数据结构的最佳(易于维护,合理快速,健壮)实现是什么? 我想使用Dictionary或SortedDictionary,因为所有值(节点)都有唯一的键。
假定第一层大约有300个项目,第二层每个零到几十个(几乎不超过100个,通常少于10个)项目,第三层大约有十个项目。 第2级和第3级紧密相连,因此它们可能应该由单个对象表示。 所有的关系都是1:n
++-L1
|++-L2
||+--L3
||+--...1 to 10 L3 items for each L2
||+--L3
|+--L2
|+--...0 to 100, usually <10 L2 items for each L1
|+--L2
+--L1
+--L1
+--...about 300 L1 items
+--L1
在每个包含level2对象(真实树)的1级对象中创建字典是更好还是将所有2级对象放入单个目录中更好?
这些对象不是很大,它们仅包含一些字符串和数字。 该应用程序应该是独立的(不需要任何sql server左右)
还是对象表示是错误的选择,我应该选择完全不同的东西吗?
为什么不仅仅创建一个TreeNode类呢?
class TreeNode
{
private string _name;
private int _someNumber;
private int _uniqueId;
private List<TreeNode> _childNodes;
public string Name{get{return _name;}}
public int SomeNumber{get{return _someNumber;}}
public int UniqueId{get{return _uniqueId;}}
public List<TreeNode> ChildNodes{get{return _childNodes;}}
public void TreeNode(string name, int someNumber, int uniqueId)
{
_name=name;
_someNumber=someNumber;
_uniqueId = uniqueId;
_childNodes = new List<TreeNode>();
}
public void AddNode(TreeNode node)
{
_childNodes.Add(node);
}
// other code for deleting, searching, etc.
}
根据树的动态情况,可以相对简单和高效(尽管您可能更喜欢高度简单和相对高效)的一个选项是阵列数组的阵列(而不是单个3D阵列)。 如果每个节点的子节点数量变化很大,那将是不好的……不断分配新的子数组。 但是,如果只计算一次每个节点的子节点,然后再访问它们,那么由数组组成的数组将非常简单,容易,紧凑和快速。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.