C#红黑树实现代码

在学习红黑树之前,最好已经学习过AVL树了,因为二者的实现方式是有很大程度类似的(左旋和右旋),但是只不过二叉平衡树是在每次加入节点时,需要计算该节点的左右子树高度差,如果高度差大于一则旋转调节使其平衡;而红黑树是在每次加入节点时计算红黑节点之间的关系,如果关系错误,则通过旋转和改变颜色来调节树的结构。

总之,AVL树也好,RB树也好,都只不过是一种优化二叉查找树的高级方式而已。

下面是C#实现的红黑树插入操作,并附加了详细的注释,如果你了解红黑树的原理,应该很容易看懂,最后通过优雅的层序遍历将节点值和节点颜色输出出来。并且利用一个国外一个有名的红黑树网站生成了树的结构,验证了代码的正确性。

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

namespace RBTree
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] a = { 11, 2, 14, 1, 7, 15, 5, 8 };

            RBTree rbTree = new RBTree();
            foreach (var item in a)
            {
                rbTree.Insert(item);
            }
            rbTree.LayerOrder(rbTree.rootnode);
            rbTree.Insert(4);
            Console.WriteLine();
            Console.WriteLine();
            rbTree.LayerOrder(rbTree.rootnode);
            Console.WriteLine();
            Console.WriteLine();
        }
    }

    public enum Color
    {
        red,black
    }

    class RBTreeNode
    {
        public int key;
        public RBTreeNode left;
        public RBTreeNode right;
        public Color color;
        //由于红黑树需要寻找父节点和祖父节点以及叔节点
        //因而需要多设置一个parent节点来方便操作
        public RBTreeNode parent;
        public RBTreeNode(int item,Color color)
        {
            key = item;
            left = null;
            right = null;
            this.color = color;
        }
        public override string ToString()
        {
            //重写tostring()方法,在输出时会默认调用
            return key + "(" + color.ToString() + ")";
        }
    }

    class RBTree
    {
        //定义根节点
        public RBTreeNode rootnode;

        public void Insert(int item)
        {
            if(rootnode =
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值