泛型实现二叉树

参考资料《Visual C# 2010 从入门到精通》 18.3.2 使用泛型构造二叉树类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BinaryTreeTest
{
    class Program
    {
        static void Main(string[] args)
        {
            创建一棵int树
            Tree<int> tree1 = new Tree<int>(10);

            增加节点
            tree1.Insert(5);
            tree1.Insert(11);
            tree1.Insert(5);
            tree1.Insert(-12);
            tree1.Insert(15);
            tree1.Insert(0);
            tree1.Insert(14);
            tree1.Insert(-8);
            tree1.Insert(10);
            tree1.Insert(8);
            tree1.Insert(8);
            //输出结果
            tree1.WalkTreeLeftToRight();
            Console.WriteLine("\r\n");
            tree1.WalkTreeRightToLeft();

            Console.WriteLine("\r\n");

            Tree<string> tree2 = new Tree<string>("Hello");
            tree2.Insert("World");
            tree2.Insert("How");
            tree2.Insert("Are");
            tree2.Insert("You");
            tree2.Insert("Today");
            tree2.Insert("I");
            tree2.Insert("Hope");
            tree2.Insert("You");
            tree2.Insert("Are");
            tree2.Insert("Feeling");
            tree2.Insert("Well");
            tree2.Insert("!");
            //输出结果
            tree2.WalkTreeLeftToRight();
            Console.WriteLine("\r\n");
            tree2.WalkTreeRightToLeft();

            //
            Console.ReadLine();
        }
    }

    //二叉树类
    public class Tree<TItem> where TItem : IComparable<TItem>
    {
        //类的属性
        public TItem NodeData { get; set; }
        public Tree<TItem> LeftTree { get; set; }
        public Tree<TItem> RightTree { get; set; }

        //类的构造函数
        public Tree(TItem nodeValue)
        {
            this.NodeData = nodeValue;
            this.LeftTree = null;
            this.RightTree = null;
        }

        //增加节点
        public void Insert(TItem newItem)
        {
            TItem currentNodeValue = this.NodeData;

            if (currentNodeValue.CompareTo(newItem) > 0)
            {
                //左子树(newItem < currentNodeValue)
                if (this.LeftTree == null)
                {
                    this.LeftTree = new Tree<TItem>(newItem);   //创建一个新树
                }
                else
                {
                    this.LeftTree.Insert(newItem);              //递归调用Insert方法
                }
            }
            else
            {
                //右子树(newItem >= currentNodeValue)
                if (this.RightTree == null)
                {
                    this.RightTree = new Tree<TItem>(newItem);  //创建一个新树
                }
                else
                {
                    this.RightTree.Insert(newItem);             //递归调用Insert方法
                }
            }
        }

        //遍历树(左->右)
        public void WalkTreeLeftToRight()
        {
            //1.左子树
            if (this.LeftTree != null)
            {
                this.LeftTree.WalkTreeLeftToRight();
            }

            //2.节点
            Console.Write(this.NodeData.ToString() + " ");

            //3.右子树
            if (this.RightTree != null)
            {
                this.RightTree.WalkTreeLeftToRight();
            }
        }

        //遍历树(右->左)
        public void WalkTreeRightToLeft()
        {
            //1.右子树
            if (this.RightTree != null)
            {
                this.RightTree.WalkTreeRightToLeft();
            }

            //2.节点
            Console.Write(this.NodeData.ToString() + " ");

            //3.左子树
            if (this.LeftTree != null)
            {
                this.LeftTree.WalkTreeRightToLeft();
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值