C#BinaryTree实现

时间:2015-03-10 18:33:38

标签: c# tree binary-tree sortedset sorteddictionary

我需要一个二叉树或其他结构,我可以在其中存储带有时间戳的对象,然后快速查找它们,不仅仅是我知道的时间戳,还有一个范围

    (timestamp > min && timestamp < max).

我发现SortedDictionary和SortedSet都实现了二叉树。我缺少的是能够按范围查找&gt; &安培;&安培; &LT;而不是在内部强制它(SortedDictionary或SortedSet)来迭代超出他们需要的元素。

我的意思是当我打电话时

 SortedDictionary.TryGetValue(DateTime.Now, ... 

应该采用对数时间。

我希望能够在对数时间内获得Min和Max之间的所有项目。缺少

SortedDictionary.TryGetValueBetween(DateTime.Now-SomeInterval, DateTime.Now+SomeInterval,... 

如果我自己实现二叉树,那就没问题了。但我没有看到使用SortedDictionary或SortedSet进行此操作的机制。而且我不想诉诸线性时间。

我是不是找不到合适的方法,或者我是否真的需要自己实现二叉树以获得我想要的好处?

也欢迎其他选择。是否有一个不同的结构可以让我在日志时间或更好的时间内插入,删除和“范围查找”。

1 个答案:

答案 0 :(得分:2)

找到2个解决方案:

  1. 仔细观察,SortedSet确实有我需要的方法:GetViewBetween

  2. 在一个名为Wintellect.PowerCollections的免费第三方库中,有OrderedMultiDictionary类(请参阅here),它可以满足我的需求并允许重复项进入集合(与SortedSet不同)。获取2个值之间的范围的方法称为Range()。

  3. 据我所知,在log(n)时间内进行插入,删除和查找。