初步了解红黑树

目录

一、引入

1.树

 特点:

术语:

2.二叉树 

 完全二叉树

 二叉搜索树

 平衡二叉树

二 2-3树 

三、红黑树

插入规则:

 红黑树与AVL的比较和选择

红黑树与2-3树比较

总结


一、引入

学习红黑树,首先要了解树得一些概念,以及二叉树,二叉搜索树,平衡二叉树,2-3搜索树得一些特点。

1.树

定义:树是一种数据结构,由n个节点构成具有层级结构得集合,由根向底部扩展,如下图:

 特点:

1.每个节点有0个或多个子节点;

2.根节点没有父节点;

3.非根节点只有一个父节点;

4.除了根节点,每个子结点可以分为多个不相交得子树。

术语:

1.节点的度:节点子树的个数

2.树的度:树中结点最大的度

3.叶子的节点:度为0的节点

4.分支节点:度不为0

5.层次:根节点层次为1,其他节点为其父节点层次+1

6.高度:树中节点最大层次

2.二叉树 

每个节点最多有两个子节点的树,如图:

 完全二叉树

一棵二叉树只有最下面两层节点的度可以小于2,并且叶子节点在左侧,如图:

 二叉搜索树

整棵树不存在值相等的节点,且每个节点左子树节点的值小于其值,右子树节点的值大于其值。

 平衡二叉树

二叉搜索树的每个节点左右子树高度差的绝对值不大于1。

如何保持平衡?通过平衡因子(BF),BF=左右子树高度差的绝对值,如果大于1则认为失衡,进行旋转操作。

两种旋转:

左旋:旧根节点(BF失衡的点)作为新根节点的左子树,新根节点左子树为旧节点右子树;

 右旋:旧根节点(BF失衡的点)作为新根节点的右子树,新根节点左子树为旧节点左子树;

四种纠正方式:

1.LL型,直接右旋

2.RR型,直接左旋

3.LR型,先左旋,再右旋

4.RL型,先右旋,再左旋

 

 作用:保证了搜索数据的时间复杂度为OlogN,这就解决了二叉搜索树退化成链表导致时间复杂度上升为OlogN2

二 2-3树 

拥有2-节点 和3-节点,并且和二叉搜索树类似,左边的小右边的大;

2-节点:普通节点,一个节点一个值,两个子树;

3-节点:一个节点俩值,三个子树,左子树都小,右子树都大,中间的介于俩值之间。

 特点:插入时并不会直接增加树的高度,再找到对应位置时,将父节点变为3-节点或者4-节点

后面再将4-节点分解,将中间值拿到上边如果形成4-节点就继续分解,剩下两个分为两个2-节点,这样就相当于增加根节点,也就说2-3树是向上增长的,这也就是绝对平衡。

三、红黑树

红黑树就是通过二叉搜索树的形式,加上其他信息来表示2-3树。

红黑树通过一条左斜的红链接,连接两个2-节点来形成3-节点,黑链接则是普通节点。

3-节点:

红连接:

 

所有在这里,红黑树的特点为:
1.红连接均为左连接(因为2-3树转为红黑树的方法是左斜)
2.没有任何一个节点同时和两条红连接项链(因为2-3树种不存在4叉)
3.树是黑色平衡的,即任意空节点到根节点的距离相同,因为2-3树是平衡的,2-3中的连接都是黑色的,红色的连接只是将3-节点转化为2-节点而产生的,所以如果去掉红色连接,应该满足黑色平衡。

4.根节点为黑色

5.新插入的节点为红色

 因为不允许两个连续的红连接,所以最长路径不会超过最短路径的二倍。

插入规则:

1.旋转:

如果出现红色右链接,则需要左旋

 出现两个红色左连接,需要右旋:

 LR型红链接,先左旋再右旋:

 2.变色:

1.根节点总是黑色的

2.节点拥有两个红链接时需要颜色转换:

 如果是根节点,转换后还是黑色:

 红黑树与AVL的比较和选择

AVL查询时间复杂度是Ologn,而红黑树是黑平衡所以最坏情况下时间复杂度为O(2logn)

两者的插入 删除 的时间复杂度都是Ologn,但是红黑树插入删除时的旋转操作要少于AVL,因此性能上略优于AVL,因此,如果插入删除较多时选择红黑树。

红黑树与2-3树比较

红黑树没有达到2-3的绝对平衡,但是它提升了速度,而且能保证黑色平衡,最长路径不超过最短路径的二倍,基本保证Ologn,而且2-3树的结构不利于维护,因此多数情况下红黑树性能更高。


总结

实际应用中,红黑树使用较多,比如map和set的底层实现,epoll的实现等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BlackMonkeyHH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值