数据结构——红黑树(Red Black Tree,RBTree)

红黑树(Red Black Tree,RBTree)

一、为什么引入红黑树?

        平衡二叉树(AVL):插入/删除很容易破坏“平衡”特性,需要频繁调整树的形态。如:插入操作导致不平衡,则需要先计算平衡因子,找到最小不平衡子树(时间开销大),再进行LL/RR/LR/RL调整。
        红黑树(RBT):插入/删除很多时候不会破坏“红黑”特性,无需频繁调整树的形态。即便需要调整,一般都可以在常数级时间内完成。

        平衡二叉树:适用于以查为主、很少插入/删除的场景。
        红黑树:适用于频繁插入、删除的场景,实用性更强。

二、红黑树的定义

        一棵红黑树是满足如下红黑性质的二叉排序树

        1.每个结点或是红色,或是黑色。

        2.根结点是黑色。

        3.叶结点(虚构的外部结点、NULL结点)都是黑色的。

        4.不存在两个相邻的红结点(即红结点的父结点和孩子结点均是黑色的)。

        5.对每个结点,从该结点到任意一个叶结点的简单路径上,所含黑结点的数量相同。

        总结:左根右,根爷黑,不红红,黑路同。

三、红黑树的推论

        1.从根到叶结点的最长路径不大于最短路径的2倍。

        2.有n个内部结点的红黑树的高度h<=2log2^(n+1)。

四、红黑树的查找

        与BST、AVL相同,从根出发,左小右大,若查找到一个空叶结点,则查找失败。

五、红黑树的插入

        ·先查找,确定插入位置(原理同二叉排序树),插入新结点。
        .新结点是根一一染为黑色
        .新结点非根一一染为红色
                ·若插入新结点后依然满足红黑树定义,则插入结束。
                ·若插入新结点后不满足红黑树定义,需要调整(看新结点叔叔的“脸色”),使其重新满足红黑树定义。
                        ·黑叔:旋转+染色
                                ·LL型:右单旋,父换爷+染色
                                ·RR型:左单旋,父换爷+染色
                                ·LR型:左、右双旋,儿换爷+染色
                                ·RL型:右、左双旋,儿换爷+染色
                       .红叔:染色+变新
                                ·叔父爷染色,爷变为新结点。

六、红黑树的删除

        在红黑树中删除结点的处理方式和“二叉排序树的删除”一样。
        删除结点后,可能破坏“红黑树特性”,此时需要调整结点颜色、位置,使其再次满
足“红黑树特性”。

七、关于红黑树的操作大家可以自己去在线演示网站试试:


        英文版:Red/Black Tree Visualization icon-default.png?t=N7T8https://www.cs.usfca.edu/~galles/visualization/RedBlack.html

        英文版网站还有各种数据结构的在线演示:
Data Structure Visualization icon-default.png?t=N7T8https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值