具有三个级别的树状数据结构的最佳(易于维护,合理快速,强大)实现是什么? 我想使用Dictionary或SortedDictionary,因为所有值(节点)都有唯一的密钥。
第一级应该有大约300个项目,每个项目在第二级别上为0到10(几乎不超过100,通常少于10),在第三级别上大约为10。第二级和第三级紧密相连,因此它们应该由单个对象表示。所有关系都是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服务器)
或者对象表示是错误的选择,我应该选择完全不同的东西?
答案 0 :(得分:3)
为什么不只创建一个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.
}
答案 1 :(得分:1)
根据树的动态,一个可以相对简单和高效的选项(尽管您可能更喜欢高度简单且相对高效)将是一个数组数组(不是单个3D数组)。如果每个节点的子节点数变化很大,那就太糟糕了......不断分配新的子阵列。但是如果你只计算一次每个节点的子节点,然后只是访问它们,那么一个数组数组就可以非常简单,简单,快速。