简单聊聊红黑树(Red Black Tree)

â红ä¸é»âçå¾çæç´¢ç»æ

 

前言

众所周知,红黑树是非常经典,也很非常重要的数据结构,自从1972年被发明以来,因为其稳定高效的特性,40多年的时间里,红黑树一直应用在许多系统组件和基础类库中,默默无闻的为我们提供服务,身边有很多同学经常问红黑树是怎么实现的,所以在这里想写一篇文章简单和大家聊聊下红黑树

 

小编看过很多讲红黑树的文章,都不是很容易懂,主要也是因为完整的红黑树很复杂,想通过一篇文章来说清楚实在很难,所以在这篇文章中我想尽量用通俗口语化的语言,再结合 Robert Sedgewick 在《算法》中的改进的版本(2-3树版本,容易理解也方便实现),可以保证让大家对红黑树的原理有大概的理解,其实对于大部分同学来说,大概了解红黑树的工作原理就基本够用了,因为通常不会有人让你去手写红黑树,你也几乎不需要去自己实现一个红黑树,看完这里,如果感觉意犹未尽,还有兴趣的同学可以去看看《算法导论》的红黑树实现,那是完整的4阶 B树(2-3-4树)版本的实现

 

所以我们的主题是关于红黑树的灵魂三问:

  1. 为什么会有红黑树?
  2. ​红黑树的应用场景和定义?
  3. 红黑树的高效和稳定是怎么实现?

 

为什么会有红黑树

要了解红黑树,先它的前辈:二叉树,平衡二叉树(我们假设读者都具备这些前置知识,所以我们只做大概的讲解)

前置知识:

二叉树:传统的数组和链表等线性结构表效率低下,线性表在处理大规模数据的时间复杂度都是线性级别 O(n),所以这种低效的数据结构,几乎不可能用来处理千万级别或者以上的数据量,于是基于二分思想的二叉树就诞生了,在最好情况下,二叉树查找的时间复杂度可以达到恐怖的对数级别 O(logN),什么概念呢?就是在十亿级别的数据量里面,二叉树只需要15~30次的访问就可以找到目标,当然我们的前提是最好情况,那么最坏情况呢?可以参考下图

二叉树的最好情况:

二叉树的最坏情况:

我们从上图可以看到,二叉树的性能的好坏,依赖数据的插入顺序,最坏情况下二叉树会退化为链表,所有操作的时间复杂的度回到的线性级别 O(n),那么怎么解决这个问题呢?

首先平衡二叉树出现了,平衡二叉树的思想是在操作的时候对树进行平衡调整,来防止二叉树退化为链表,从而保证二叉树的最优查找性能,完美的平衡二叉树对高度的定义是相差不会大于1,这就相当于每次都插入/删除操作,都会对树进行平衡操作,这是代价非常高的操作,你可以理解为,类似数组为了保证有序性,数组中间插入数据,所有元素都要向后移动的代价,虽然名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值