.NET 4.0中是否有内置的二进制搜索树,还是需要从头开始构建这种抽象数据类型?
这是关于二进制搜索树的,而不是抽象数据类型“树”。
答案 0 :(得分:53)
我认为System.Collections.Generic
中的SortedSet<T>
课程正是您所寻找的。 p>
使用a实现 自我平衡的红黑树那 给出了性能复杂性 O(log n)用于插入,删除和 抬头。它用于保持 按顺序排列的元素,以获得 特定元素的子集 范围,或获得最小或最大 集合的元素。
答案 1 :(得分:18)
在我提出这个问题五年后,我意识到.NET 4.0中确实存在一个内置的二进制搜索树。它可能稍后添加,并按预期工作。它在每次插入后自我平衡(遍历),这会降低添加大量项目的性能。
SortedDictionary<TKey, TValue>
类有以下备注:
SortedDictionary泛型类是一个带有O(log n)检索的二叉搜索树,其中n是字典中元素的数量。在这方面,它类似于SortedList泛型类。这两个类具有相似的对象模型,并且都具有O(log n)检索。
答案 2 :(得分:7)
不,.NET不包含Binary Search Tree。它确实包含一个Red-Black Tree,它是一种特殊的二进制搜索树,其中每个节点都涂成红色或黑色,并且使用这些颜色有一定的规则可以保持树的平衡,并允许树保证 O (登录)搜索时间。标准二进制搜索树无法保证这些搜索时间。
该类称为SortedSet<T>
,并在.NET 4.0中引入。您可以查看它的源代码here。以下是它的一个使用示例:
// Created sorted set of strings.
var set = new SortedSet<string>();
// Add three elements.
set.Add("net");
set.Add("net"); // Duplicate elements are ignored.
set.Add("dot");
set.Add("rehan");
// Remove an element.
set.Remove("rehan");
// Print elements in set.
foreach (var value in set)
{
Console.WriteLine(value);
}
// Output is in alphabetical order:
// dot
// net
答案 3 :(得分:6)
可以找到一个C#平衡的AVL二叉树@ http://code.google.com/p/self-balancing-avl-tree/。它还实现了对数连接和拆分操作
答案 4 :(得分:3)
答案 5 :(得分:3)
C5集合库(请参阅http://www.itu.dk/research/c5/)包括具有平衡红黑二叉树的TreeDictionary<>
类。注意:我还没有使用过这个库,因为我所做的工作只需要标准的.NET集合。
答案 6 :(得分:2)
我不确定你对'tree'究竟是什么意思,但是你可以对List类进行二进制搜索。
public int BinarySearch( T item );
public int BinarySearch( T item, IComparer<T> comparer );
public int BinarySearch( int index, int count, T item, IComparer<T> comparer );
答案 7 :(得分:2)
Thanx到 herzmeister der welten ,我现在知道了!我试了一下它真的有效!
namespace Tree
{
public partial class Form1 : Form
{
private SortedSet<int> binTree = new SortedSet<int>();
public Form1()
{
InitializeComponent();
}
private void Insert(int no)
{
binTree.Add(no);
}
private void Print()
{
foreach (int i in binTree)
{
Console.WriteLine("\t{0}", i);
}
}
private void btnAdd_Click(object sender, EventArgs e)
{
Insert(Int32.Parse(tbxValue.Text));
tbxValue.Text = "";
}
private void btnPrint_Click(object sender, EventArgs e)
{
Print();
}
}
}