红黑树和平衡二叉树的区别_红黑树(R-B tree)原理图文详解

引言:
学过数据数据结构都知道二叉树的概念,而又有多种比较常见的二叉树类型,比如完全二叉树、满二叉树、二叉搜索树、均衡二叉树、完美二叉树等;今天我们要说的红黑树就是就是一颗非严格均衡的二叉树,均衡二叉树又是在二叉搜索树的基础上增加了自动维持平衡的性质,插入、搜索、删除的效率都比较高。红黑树也是实现TreeMap存储结构的基石。

ccf2080dc2eb738120793dbec1446de9.png

一. 二叉搜索树
二叉搜索树又叫二叉查找树、二叉排序树,我们先看一下典型的二叉搜索树,这样的二叉树有何规则特点呢?
1.节点的左子树小于节点本身;
2.节点的右子树大于节点本身;
3.左右子树同样为二叉搜索树;
下图就是一颗典型的二叉搜索树

b543d5fa1861334827dd14efe18854df.png


二叉搜索树是均衡二叉树的基础,我们看一下它的搜索步骤如何
我们要从二叉树中找到值为 58 的节点第一步:首先查找到根节点,值为60的节点

6a6358ce5b0a016c2c287d31511dd19d.png

第二步:比较我们要找的值58与该节点的大小
如果等于,那么恭喜,已经找到;
如果小于,继续找左子树;
如果大于,那么找右子树;
很明显58 < 60,因此我们找到左子树的节点 56,此时我们已经定位到了节点56

74f9d4095739785f3aa8ab2fed3c1556.png

第三步:按照第二步的规则继续找
58 > 56 我们需要继续找右子树,定位到了右子树节点58,恭喜,此时我们已经找到了。

cf73727a545349f7879ee0d742ca78a6.png


我们经过三步就已经找到了,其实就是我们平时所说的二分查找,这种二叉搜索树好像查找效率很高,但同样它也有缺陷,如下面这样的二叉搜索树。

16749714b23294ddee968c427f94c89c.png


看到这样的二叉搜索树是否很别扭,典型的大长腿瘸子,但它也是二叉搜索树,如果我们要找值为50的节点,基本上和单链表查询没多大区别了,性能将大打折扣。这个时候我们的均衡二叉树就粉墨登场了,均衡二叉树就是在二叉搜索树的基础上添加了自动维持平衡的性质。
上面的大长腿瘸子二叉搜索树经过自动平衡后,可能就成为了下面这样的二叉树。

9175e93dc8943dd0d797e81d63809edb.png


经过了自动平衡,再去找值为50的节点,查找性能将提升很多。红黑树就是非严格均衡的二叉搜索树。二. 红黑树规则特点
红黑树具体有哪些规则特点呢?
1.节点分为红色或者黑色;
2.根节点必为黑色;
3.叶子节点都为黑色,且为null;
4.连接红色节点的两个子节点都为黑色(红黑树不会出现相邻的红色节点);
5.从任意节点出发,到其每个叶子节点的路径中包含相同数量的黑色节点;
6.新加入到红黑树的节点为红色节点;
规则看着好像挺多,没错,因为红黑树也是均衡二叉树,需要具备自动维持平衡的性质,上面的6条就是红黑树给出的自动维持平衡所需要具备的规则
我们看一看一个典型的红黑树到底是什么样儿?

113a1214bbd1661af467a4319783f802.png


首先解读一下规则,除了字面上看到的意思,还隐藏了哪些意思呢?第一. 从根节点到叶子节点的最长路径不大于最短路径的2倍怎么样的路径算最短路径?
从规则5中,我们知道从根节点到每个叶子节点的黑色节点数量是一样的,那么纯由黑色节点组成的路径就是最短路径;什么样的路径算是最长路径?
根据规则4和规则3,若有红色节点,则必然有一个连接的黑色节点,当红色节点和黑色节点数量相同时,就是最长路径,也就是黑色节点(或红色节点)* 2第二. 为什么说新加入到红黑树中的节点为红色节点
从规则4中知道,当前红黑树中从根节点到每个叶子节点的黑色节点数量是一样的,此时假如新的黑色节点的话,必然破坏规则,但加入红色节点却不一定,除非其父节点就是红色节点,因此加入红色节点,破坏规则的可能性小一些,下面我们也会举例来说明。
什么情况下,红黑树的结构会被破坏呢?破坏后又怎么维持平衡,维持平衡主要通过两种方式【变色】和【旋转】,【旋转】又分【左旋】和【右旋】,两种方式可相互结合。
下面我们从插入和删除两种场景来举例说明因为文章过长不能一一上传编写,所以整理成了PDF文档,想要获取的小伙伴的朋友,可以私信我关键字【资料】进行获取。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值