【数据结构】快速理解红黑树

红黑树是一种特殊的二叉查找树,除了二叉查找树的基本特性外它还有自平衡的功能;

基础-二叉查找树

特点

  • 子树上所有节点的值均小于或等于它根节点的值;
  • 子树上所有节点的值均大于或等于它根节点的值;
  • 左、右子树也分别为二叉查找树;
  • 中序遍历后,是一个从小到大的有序队列

删除结点

二叉查找树删除结点共分三种情况:
情况一:待删除的结点没有子结点
直接删除即可
情况二:待删除的结点有一个孩子
待删除的结点直接被子结点取代即可
情况三:待删除的结点有两个孩子
由中序遍历,找出待删除结点的前后两个结点,选出一个来替代待删除结点(一般选取右边值较大的结点);循环删除多余结点即可

思想

利用二分查找的思想组织数据,查找所需的最大次数等同于二叉查找树的高度;

缺点

二叉查找树多次插入新结点导致不平衡,例如依次往二叉查找树中插入 7 6 5 4 3
在这里插入图片描述

正题-红黑树

为解决二叉查找树不平衡的问题,红黑树出现了,定义了一系列规则来限制红黑树,保证了从根结点到叶子的最长路径不会超过最短路径的两倍,下面介绍红黑树的相关知识。

特性

  • 结点为红色或黑色;
  • 根节点是黑色;
  • 每个叶子结点都是黑色的空结点;
  • 每个红色结点的两个子结点都是黑色。
  • 从任意一结点到其每个叶子结点所包含相同数目的黑色结点;

添加元素

  1. 往黑色结点下添加一个红色结点,这种情况并不会破坏红黑树的规则,如下图所示:
    在这里插入图片描述
  2. 往红色结点下添加一个红色结点,这种情况打破了规则4(每个红色结点的两个子结点都是黑色),这种情况下需要作出调整,使之重新复核红黑树的规则。

调整方法

变色

为了重新符合红黑树的规则,可尝试把红色结点变为黑色,或者把黑色结点变为红色

旋转

左旋转
逆时针旋转红黑树的两个结点,是的父结点黑自己接的右孩子取代,而自己则调整左孩子的位置
右旋转
同左旋转概念

添加元素调整红黑树规则

在红黑树插入新结点的时候,可以分为5种不同的局面,每一种局面有不同的调整方法:
局面一:新结点位于树根,没有父结点
调整方法:直接让新结点变为黑色,使规则二得到满足。。同事根结点使得每条路径上的黑色结点都增加了1,所以没有打破规则。
在这里插入图片描述
局面二:新结点(B)的父结点是黑色的
这种局面,新插入的红色结点B并没有打破红黑树的规则,所以不需要做调整。
在这里插入图片描述局面三:新结点(D)的父结点和叔叔结点都是红色

在这里插入图片描述
这种局面,两个红色结点连续,违反了规则4,因此我们先让结点B变为黑色:

在这里插入图片描述
调整后,结点B所在的路径凭空多了一个黑色结点,打破了规则5.因此调整A结点变为红色:

在这里插入图片描述
这时,结点A和结点C成为了连续的红色结点,我们再让结点C变为黑色:
在这里插入图片描述
调整后,这一局面重新符合红黑树的规则。

局面四:新结点(D)的父节点是红色,叔叔结点是黑色或者没有叔叔结点,且新结点的父结点(B)是祖父结点(A)的左子结点

在这里插入图片描述
我们以B结点为轴,做一次左旋转,使新结点D成为父结点,原来的父结点成为D的左孩子:
在这里插入图片描述
这样一来,进入了局面五
局面五:新结点(D)的父结点是红色,叔叔结点是黑色或者没有叔叔,且新结点是父结点的左孩子,父结点(B)是父结点的左孩子
在这里插入图片描述
我们以结点A为轴,做一次右旋转,使得结点B成为祖父结点,结点A成为结点B的右孩子:
在这里插入图片描述
接着,让B结点变为黑色,A结点变为红色:
在这里插入图片描述
调整后,这一局面重新符合了红黑树的规则。

删除元素调整红黑树规则

bla…bla…反正很复杂,记不住

AVL树和红黑树的区别

AVL树是严格平衡的二叉树,要求每个结点的左右子树高度不超过1;而红黑树则要宽松一些,要求任何一条路径的长度不超过其他路径长度的两倍。
正因为这个区别,AVL树的查找效率比红黑树高,而红黑树的插入和删除效率比AVL树高。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值