学习C#泛型概述,构建二叉树的泛型类

创建一个泛型二叉树类,任何类型都可以构建二叉树,一个约束条件这个类型具有比较大小的功能。

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方法中,少添加了一个逗号,你发现了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值