欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

学习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.测试程序,在测试控制台应用程序中引用上面生成的程序集

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

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 }");

        }

执行结果:排序输出了!

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

注意:上面的walk方法中,少添加了一个逗号,你发现了吗?