红黑树详解

本文详细介绍了红黑树的基本概念,包括其与AVL树的区别和优势。红黑树是一种自底向上生长的二叉搜索树,通过特定的着色规则保证平衡,避免了AVL树在插入和删除时的频繁旋转,从而在整体性能上优于AVL树。在插入操作中,针对不同情况进行了详细的步骤分析,确保红黑树的性质得以维护。红黑树在增删频繁的场景下是理想选择,而AVL树则在查询密集型应用中更具优势。
摘要由CSDN通过智能技术生成
  • 基础知识

红黑树是一种二叉搜索树,是AVL树的改进版。
红黑树的生长是自底向上的,跟2-3树类似
为啥引入红黑树:
1、二插搜索树会出现退化成链表的情况,其时间复杂度为O(n)
2、为防止二叉搜索树会退化成链表,引入了对左右子树的高度差有严格显示的AVL树。
    AVL树的缺点:
    因为对左右子树的高度差有严格的规定,所以其在插入和删除时会出现旋转,导致性能下降。
这才有了对平衡概念不是很严格的红黑树

红黑树与AVL树的比较
1. AVL树的时间复杂度优于红黑树,但是对于现在的计算机,这种差别可以忽略
2. 红黑树的插入删除比AVL树更便于控制操作。
3. 红黑树整体性能略优于AVL树。(红黑树旋转情况少于AVL树)。这点是非常重要的
4. 如果是在查询很多增删少的情况下 AVL 树还是优于红黑树的,如果增删比较频繁,那红黑树绝对是完美的一种选择

红黑树的特性:
1. 根节点是【黑色】
2. 每个节点是【黑色】或者是【红色】
3. 【红色】节点的两个子节点一定都是【黑色】
4. 每个叶子节点(NIL)都是【黑色】
5. 任意一个节点到叶子节点的路径上所包含的【黑色】节点的数量是相同的---这个也称之为【黑色完美平衡】

  • 插入

下图中插入节点为I,父节点为P,爷爷节点为PP,叔叔节点为U。

1、红黑树为null,则新插入节点作为根节点,变色为黑色

2、插入节点的父节点为黑色,直接插入即可

3、插入节点的父节点为红色

    3.1插入节点的父节点为插入节点的爷爷节点的左孩子
        3.1.1插入节点的叔叔节点存在,且为红色
             将新插入节点的父节点和其叔叔节点设置为黑色即可,爷爷节点设置为红色,将爷爷节点设置为当前节点

如果pp为根节点,则其仍未黑色,此时为增加黑色的格式
        3.1.2 叔叔节点不存在(其实叔叔节点不可能为黑色,因为在新插入节点之前,父节点是红色,破坏了黑色平衡,故叔叔节点一定是不存在的)
        (1)插入节点为其父节点的左孩子
                将父节点设置为黑色,爷爷节点设置为红色,对其爷爷节点进行右旋,当前节点设置为P


        (2)插入节点为其父节点的右孩子
            先对父节点进行左旋,将插入节点设置为黑色,爷爷节点设置为红色,然后对其爷爷节点进行右旋,I设置为当前点

    3.2插入节点的父节点为插入节点的爷爷节点的右孩子
        3.2.1 插入节点的叔叔节点存在,且为红色
            将新插入节点的父节点和其叔叔节点设置为黑色即可,爷爷节点设置为红色,将爷爷节点设置为当前节点


        3.2.2 叔叔节点不存在(其实叔叔节点不可能为黑色,因为在新插入节点之前,父节点是红色,破坏了黑色平衡,故叔叔节点一定是不存在的)
        (1)插入节点为其父节点的右孩子
            将父节点设置为黑色,爷爷节点设置为红色,对其爷爷节点进行左旋


        (2)插入节点为其父节点的左孩子
            先对其父节点进行右旋,将插入节点设置为黑色,爷爷节点设置为红色,然后对其爷爷节点进行左旋

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值