【数据结构之红黑树】深入原理与实现

本文详细介绍了红黑树这种数据结构,从2-3树出发,探讨2-3树与红黑树的关系,以及红黑树的插入节点操作,包括左旋转、颜色翻转和右旋转。通过实例解析红黑树的插入过程,阐述其在保持平衡性和插入效率方面的优势,适合对数据结构感兴趣的后端开发者学习。
摘要由CSDN通过智能技术生成

从这篇文章开始我们来介绍红黑树这种数据结构,由于红黑树有二分搜索树和AVL树的性质,对于红黑树的操作同样依赖于这些性质。所以,如果理解了二分搜索树和AVL树之后再来理解红黑树其实相对来讲还是比较简单的。

红黑树是由Robert Sedgewick发明的,你如果不知道Robert是谁,网上很多文章都推荐一本书叫《算法4》,这本书就是Robert写的。如果你不知道《算法4》这本书,那你一定知道 Donald Knuth(中文名叫唐纳德),如果你连唐纳德也不知道那就应该去补补课了。可以说,如果没有唐纳德我们就没有衡量数据结构算法性能的方法,相应的我们也就没有提升算法性能的依据了,这就相当于是现实世界没有了尺子和秤,对于计算机科学的重要性不言而喻。他写过一套书叫《The Art of Computer Programming》 中文叫《计算机编程的艺术》。没错,微软在最鼎盛时期,比尔盖茨说读了这本书,并且读懂了,你可以把简历直接发给比尔盖茨。

我第一次去认真学习红黑树是看《算法导论》但当时备受打击,我给你看一下算法导论对红黑树的说明你就知道了。 一棵红黑树是满足下面红黑性质的二叉搜索树 1. 每个节点或是红色的,或是黑色的 2. 根节点是黑色的 3. 每个叶结点(NIL)是黑色的 4. 如果一个节点是红色的,则它的两个子节点都是黑色的 5. 对每个节点,从该节点到其所有子节点的简点路径上,均包含相同数量的黑色节点 如果第一次看到这5条性质,相信大部分人和我一样是有点蒙的,个人觉得对于红黑树的讲解比较好的还是《算法4》这本书。可能跟作者是红黑树的发明者有关系吧。

这篇文章我们最终就是要把红黑树的这几条性质搞明白。但如果直接上来就讲红黑树还是有些吃力。所以,我们从另一种树结构,2-3树作为切入点。

什么是2-3树

2-3树的特点是同一个节点可以保存一个元素,也可以保存两个元素,如下图:

​对于一颗2-3树,节点可以有1个元素或者2个元素,如果节点只有1个元素,其最多只有两个子节点,左子节点比当前节点小,右子节点比当前节点大。如果一个节点有两个元素,左子节点比小的那个元素小,右子节点比大的那个元素大,中间的子节点介于两个元素之间。最后,对一颗2-3树一定是一颗绝对平衡树,也就是平衡因子为0,回忆一下我们讲AVL树的时候对平衡因子的说明,我们说对于任一节点,其平衡因子等于左子树和右子树的层高差。

C/C++Linux服务器开发高级架构师/C++后台开发架构师​免费学习地址

【文章福利】另外还整理一些C++后台开发架构师 相关学习资料,面试题,教学视频,以及学习路线图,免费分享有需要的可以自行添加:Q群:720209036 点击加入~ 群文件共享

2-3树插入节点

2-3树节点的插入,主要还是在于维护树的绝对平衡性质,同时又不破坏2-3树的性质,下面我们通过画图的方式推演一遍2-3树插入的过程。

​在一开始,2-3树只有一个节点42,我们插入一个节点37,最终结果37和42融合成为了一个三节点。\

​插入一个节点12, 将12,37,42融合成一个4节点,但4节点明显不符合2-3树的性质。所以,我们将37抽出来融合成一个2节点,完成节点12的插入。

​插入节点18, 将12和18融合成一个3节点,完成节点18的插入操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值