红黑树是什么?红黑树如何调整?

红黑树是一种自平衡二叉查找树,用于关联数组的高效实现。其特性包括节点颜色、根节点颜色等五条规则。插入或删除节点可能导致规则破坏,通过变色和旋转操作能恢复平衡。插入红色节点可能违反规则4,需要变色或旋转调整以保持红黑树的性质。
概述;
  • 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组.
  • 红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees).后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”.
  • 红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能.
  • 它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目.
什么是红黑树?

红黑树(Red Black Tree) 是一种自平衡的二叉查询树.除了符合二叉查询树的基本特性外,还有以下的特性:

  • 1.节点是红色或黑色.
  • 2.根节点是黑色.
  • 3.每个叶子节点都是黑色的空节点(NIL节点).
  • 4.每个红色节点的两个子节点都是黑色.(从每个叶子到跟的所以路径上不能有两个连续的红色节点)
  • 5.从任意节点到其每个叶子的所以路径都包含相同数目的黑色节点.
红黑树,如下图:

在这里插入图片描述

红黑树的规则限制:
  • 正是因为这些规则限制,才保证了红黑树的自平衡.红黑树从根到叶子的最长路径不会超过最短路径的2倍.
  • 当插入或删除节点的时候,红黑树的规则有可能被打破.这时候就需要做出一些调整,来继续维持我们的规则.
什么情况下会破坏红黑树的规则,什么情况下不会破坏红黑树的规则:
  • 1.向原红黑树插入值为14的新节点:
    在这里插入图片描述由于父节点15是黑色节点,因此这种情况并不会破坏红黑树的规则,无需做任何调整。
  • 2.向原红黑树插入值为21的新节点:
    在这里插入图片描述由于父节点22是红色节点,因此这种情况打破了红黑树的规则4(每个红色节点的两个子节点都是黑色),必须进行调整,使之重新符合红黑树的规则.
如何调整?

1.变色:

  • 为了重新符合红黑树的规则,尝试把红色节点变为黑色,或者把黑色节点变为红色。
    下图所表示的是红黑树的一部分,需要注意节点25并非根节点。因为节点21和节点22连续出现了红色,不符合规则4,所以把节点22从红色变成黑色

    变色前:
    在这里插入图片描述

  • 第一步:
    在这里插入图片描述
    但这样并不算完,因为凭空多出的黑色节点打破了规则5,所以发生连锁反应,需要继续把节点25从黑色变成红色:

  • 第二步:
    在这里插入图片描述
    此时仍然没有结束,因为节点25和节点27又形成了两个连续的红色节点,需要继续把节点27从红色变成黑色:

  • 第三步:
    在这里插入图片描述

2.旋转:
2.1左旋转
逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为自己的左孩子.如下图:
在这里插入图片描述

2.2右旋转
顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子.如下图:
在这里插入图片描述
参考:https://mp.weixin.qq.com/s/-8JFh5iLr88XA4AJ9mMf6g

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值