学习C#泛型概述,构建二叉树的泛型类
程序员文章站
2022-03-13 09:58:54
...
创建一个泛型二叉树类,任何类型都可以构建二叉树,一个约束条件这个类型具有比较大小的功能。
1. 创建类库BinaryTree。
2. 实现Tree泛型类,
public class Tree<TItem> where TItem: IComparable<TItem>
System.IComarable<T>接口,要求实现CompareTo方法,与System.IComarable接口相比,就是泛型参数和object类比较的关系,不存在类型的转换的不安全性。
3. 定义树的属性
//节点
public TItem NodeData { get; set; }
//左子树
public Tree<TItem> LeftTree { get; set; }
//右子树
public Tree<TItem> RightTree { get; set; }
4. 实现构造器
//构造器
public Tree(TItem nodeValue)
{
this.NodeData = nodeValue;
this.LeftTree = null;
this.RightTree = null;
}
5. 实现插入节点,参考《学习C#泛型概述,一个二叉树的数据结构》
//插入节点
public void Insert(TItem newItem)
{
TItem currentNodeValue = this.NodeData;
if (currentNodeValue.CompareTo(newItem) > 0)
{
//插入左子树
if (this.LeftTree == null)
{
this.LeftTree = new Tree<TItem>(newItem);
}
else
{
this.LeftTree.Insert(newItem);
}
}
else
{
//插入右子树
if (this.RightTree == null)
{
this.RightTree = new Tree<TItem>(newItem);
}
else
{
this.RightTree.Insert(newItem);
}
}
}
6. 实现访问节点,参考《学习C#泛型概述,一个二叉树的数据结构》
//访问节点
public string WalkTree()
{
string result = "";
//访问左子树
if (this.LeftTree != null)
{
result = this.LeftTree.WalkTree();
}
//访问节点
result += $"{this.NodeData.ToString()}";
//访问右子树
if (this.RightTree != null)
{
result += this.RightTree.WalkTree();
}
return result;
}
7.测试程序,在测试控制台应用程序中引用上面生成的程序集
using BinaryTree;
测试代码:
static void Main(string[] args)
{
Tree<int> intTree = new Tree<int>(10);
intTree.Insert(5);
intTree.Insert(-1);
intTree.Insert(6);
intTree.Insert(5);
intTree.Insert(3);
intTree.Insert(1);
string sortedData = intTree.WalkTree();
Console.WriteLine($"Sorted data is: {sortedData }");
}
执行结果:排序输出了!
注意:上面的walk方法中,少添加了一个逗号,你发现了吗?
下一篇: vuerouter路由钩子使用教程