漫画:5 分钟学会红黑树算法!

本文深入讲解红黑树的特性和平衡调整机制,包括插入操作后的变色与旋转,确保树的平衡,避免退化成瘸腿的二叉查找树。

640?wx_fmt=gif

640?wx_fmt=jpeg

作者 | 阿广

责编 | 伍杏玲

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

下面为标准的二叉排序树:

640?wx_fmt=png

640?wx_fmt=jpeg

初始状态:

640?wx_fmt=png

其实想要搜索值为226的节点很简单,搜索动画过程如下:

640?wx_fmt=gif

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=png

这样不行!

这是个病!

得治!

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

红黑树就是一种平衡的二叉查找树,说他平衡的意思是他不会变成“瘸子”,左腿特别长或者右腿特别长。除了符合二叉查找树的特性之外,还具体下列的特性:

1. 节点是红色或者黑色

2. 根节点是黑色

3. 每个叶子的节点都是黑色的空节点(NULL)

4. 每个红色节点的两个子节点都是黑色的。

5. 从任意节点到其每个叶子的所有路径都包含相同的黑色节点。

下面为标准的红黑树,阿广建议大家对照下面的图理解上边写的红黑树的性质哦~

640?wx_fmt=png

(黑色的NULL节点可忽略)

640?wx_fmt=jpeg

640?wx_fmt=jpeg

例如上面标准的红黑树,插入值为12的节点。

640?wx_fmt=png

插入之后发现仍然满足红黑树的要求!

但是如果插入值为21的节点呢?

如下图所示:

640?wx_fmt=png

640?wx_fmt=jpeg

640?wx_fmt=jpeg

先来看一下变色!

为了符合红黑树的规则,会把节点红变黑或者黑变红。下图展示的是红黑树的部分,需要注意节点25并非根节点。因为21和22链接出现红色,不符合规则4,所以把22红变黑:

640?wx_fmt=png

但这样还是不符合规则5,所以需要把25黑变红,看下图:

640?wx_fmt=png

640?wx_fmt=jpeg

640?wx_fmt=png

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=png

640?wx_fmt=jpeg

接下来先讲一下什么是左旋转!通过动画举个例子吧!

640?wx_fmt=gif

640?wx_fmt=gif

左旋转思想示意图如下:

640?wx_fmt=png

通俗点讲一下,可以看下面的左旋转静态示意图:

640?wx_fmt=png

按照左旋转,对上边已经变色完成之后图进行左旋转。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=jpeg

640?wx_fmt=png

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=gif

640?wx_fmt=gif

可见右旋转的思想总结如下:

640?wx_fmt=png

通俗点讲一下,可以看下面的右旋转静态示意图:

640?wx_fmt=png

接下来,对上边经过左旋转之后的图进行右旋转。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=jpeg

640?wx_fmt=png

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

人生像红黑树一样,总是需要某种平衡

一边是给予,一边是接受

一边是付出,一边是得到

一边是耕耘,一边是收获

一边是物质,一边是精神

阿广你年过二十而未立

置身于五光十色的世俗社会

我希望阿广都能铭记

一个古老但不失色彩的道理!

“活得简单才能活得自由”

因为舍得,所以淡泊

因为朴素,难以物役

所以保持精神和内在的富有

才是平衡的前提!

640?wx_fmt=jpeg

声明:本文系作者投稿,版权归作者所有。

640?wx_fmt=png

640?wx_fmt=png

 热 文 推 荐 

☞真实揭秘 90 后程序员奔三准备:有人学金融投资,有人想当全栈工程师!

搞清楚这 5 个前端知识点,面试稳了!| 优快云 博文精选

从微软到微信,“对方正在输入…”功能 20 年前的起源

华人学者解开计算机领域 30 年难题:布尔函数敏感度猜想

☞天网恢恢!又一名暗网比特币洗钱者被抓了

☞乘势而起,走进2019年风口“边缘计算”

☞Python之父新发文,将替换现有解析器

☞超全!深度学习在计算机视觉领域的应用一览

中国第一程序员,微软得不到他就要毁了他!

640?wx_fmt=png 你点的每个“在看”,我都认真当成了喜欢
评论 57
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值