繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM