C#中固定深度的树状数据的最佳数据结构是什么?

时间:2009-07-23 15:46:50

标签: c# data-structures dictionary tree

具有三个级别的树状数据结构的最佳(易于维护,合理快速,强大)实现是什么? 我想使用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服务器)

或者对象表示是错误的选择,我应该选择完全不同的东西?

2 个答案:

答案 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数组)。如果每个节点的子节点数变化很大,那就太糟糕了......不断分配新的子阵列。但是如果你只计算一次每个节点的子节点,然后只是访问它们,那么一个数组数组就可以非常简单,简单,快速。