C#实现二叉树数据结构以及先序、中序、后续遍历

 /// <summary>
    /// 二叉树节点类
    /// </summary>
    public class BinNode
    {
        //二叉树的值
        private int value;
        //二叉树的左子节点
        private BinNode left;
        //二叉树的右子节点
        private BinNode right;
        //构造
        public BinNode(int value, BinNode left, BinNode right)
        {

            //base();
            this.value = value;
            this.left = left;
            this.right = right;
        }
        /// <summary>
        /// 取得左子节点
        /// </summary>
        /// <returns></returns>
        public BinNode GetLeft()
        {

            return left;

        }
        /// <summary>
        /// 取得右子节点
        /// </summary>
        /// <returns></returns>
        public BinNode GetRight()
        {

            return right;

        }
        /// <summary>
        /// 在控制台输出节点值
        /// </summary>
        public void PrintValue()
        {
            Console.WriteLine(value);
        }
    }

========================================================================
    /// <summary>
    /// 二叉树类
    /// </summary>
    public class BinTree
    {
        private BinNode root;
        /// <summary>
        /// 取得根节点
        /// </summary>
        /// <returns></returns>
        public BinNode GetRoot()
        {

            return root;

        }
        /// <summary>
        /// 构造
        /// </summary>
        /// <param name="root"></param>
        public BinTree(BinNode root)
        {

            this.root = root;

        }
        /// <summary>
        /// 先序遍历
        /// </summary>
        /// <param name="node"></param>
        public void BeforeList(BinNode node)
        {

            if (node != null)
            {
                node.PrintValue();//先访问根
                BeforeList(node.GetLeft());//然后递归访问左子节点
                BeforeList(node.GetRight());//最后递归访问右子节点
            }

        }
        /// <summary>
        /// 中序遍历
        /// </summary>
        /// <param name="node"></param>
        public void MiddleList(BinNode node)
        {

            if (node != null)
            {

                MiddleList(node.GetLeft());//先递归访问左子节点
                node.PrintValue();//然后访问根
                MiddleList(node.GetRight());//最后递归访问右子节点
            }

        }
        /// <summary>
        /// 后续遍历
        /// </summary>
        /// <param name="node"></param>
        public void AfterList(BinNode node)
        {

            if (node != null)
            {
                AfterList(node.GetLeft());//先递归访问左子节点
                AfterList(node.GetRight());//然后递归访问右子节点
                node.PrintValue();//最后访问根
            }
        }

    }

===========================================================

 static void Main(string[] args)
        {
            //创建二叉树节点

       BinNode nine = new BinNode(9,null,null);
       BinNode eight = new BinNode(8,null,null);
       BinNode seven = new BinNode(7,eight,nine);
       BinNode three = new BinNode(3,seven,null);
       BinNode five = new BinNode(5,null,null);
       BinNode six = new BinNode(6,null,null);
       BinNode two = new BinNode(2,five,six);
       BinNode one = new BinNode(1,two,three);     

       //实例化二叉树
       BinTree tree = new BinTree(one);
       //先序遍历
        Console.WriteLine("先序遍历");
       tree.BeforeList(tree.GetRoot());
       //中序遍历
        Console.WriteLine("中序遍历");
       tree.MiddleList(tree.GetRoot());
       //后序遍历
        Console.WriteLine("后序遍历");
       tree.AfterList(tree.GetRoot());


        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值