学习有序二叉树+平衡二叉树+红黑树

目录

相关文章

二叉树:就是一个节点最多能分两个叉;
多叉树:就是一个节点可分多个叉。

有序二叉树

特点:
左边节点的值小于当前节点,右边节点的值大于当前节点。

构建有序二叉树

用10、5、20、8、15、30、1构建有序二叉树。

  • 10作为根节点;
  • 5比10小,放到左边;
  • 20比10大,放到右边;
  • 8比10小,比5大,放到5的右边;
  • 15比10大,比20小,放到20的左边;
  • 30比10大,比20大,放到20的右边;
  • 1比10小,比5小,放到5的左边。
    构建有序二叉树

在有序二叉树中查找

想找查找15,跟二分查找法相似:

  • 拿15跟10根节点比较,比10大,只能在10的右边找,丢掉10的左边;
  • 拿15跟20节点比较,比20小,只能在20的左边找,丢掉20的右边;
  • 拿15跟15节点比较,两个数值相等,找到了,结束。
时间复杂度
层数节点数
第一层 1 = 2 0 1=2^0 1=20
第二层 2 = 2 1 2=2^1 2=21
第三层 4 = 2 2 4=2^2 4=22
第四层 8 = 2 3 8=2^3 8=23
…………
第y层 1 = 2 y − 1 1=2^{y-1} 1=2y1

总结点数: x = 2 0 + 2 1 + 2 2 + 2 3 + ⋯ + 2 y − 1 = 2 y − 1 x=2^0 + 2^1 + 2^2 + 2^3 + \dots + 2^{y-1}=2^y - 1 x=20+21+22+23++2y1=2y1
可以看作为: x = 2 y x=2^y x=2y
换算成y与x的关系: y = l o g x y=logx y=logx
得出时间复杂度是: O ( l o g n ) O(logn) O(logn)

练习:构建有序二叉树

用5、7、4、2、0、3、1、6构建有序二叉树。

  • 以5为根节点;
  • 7比5大,放在5的右边;
  • 4比5小,放在5的左边;
  • 2比5小,比4小,放在4的左边;
  • 0比5小,比4小,比2小,放在2的左边;
  • 3比5小,比4小,比2大,放在2的右边;
  • 1比5小,比4小,比2小,比0大,放在0的右边;
  • 6比5大,比7小,放在7的左边。
    练习

有序二叉树的缺点

从练习的有序二叉树中可以得出,它不稳定,时间复杂度也不稳定。
稳定的是平衡二叉树

平衡二叉树

特点:
1. 平衡二叉树是无论给出什么样的数据最终造出的结构如下图的样式:
平衡二叉树
它的时间复杂度能够稳定在O(logn)。
2. 左边节点的值小于当前节点,右边节点的值大于当前节点。
3. 一个节点左边子树的高度和右边子树的高度,其高度差的绝对值不能超过1。
4. 利用四种旋转:LL、LR、RR、RL构建二叉树

LL旋转

左边有2层,右边有0层。
旋转步骤:

  • 让5往右旋。
    LL旋转

LR旋转

左边有2层,右边有0层。
旋转步骤:

  • 先让大的上去,小的下来:3下来,4上去;
  • 让5往右旋。
    LR旋转

RR旋转

左边有0层,右边有2层。
旋转步骤:

  • 让5往左旋。
    RR旋转

RL旋转

左边有0层,右边有2层。
旋转步骤:

  • 让上面的下来,下面的上去:10下来,8上去;
  • 让5往左旋。
    RL旋转

构建平衡二叉树

用5、7、4、2、0、3、1、6构建平衡二叉树。

  • 以5为根节点;
  • 7比5大,放在5的右边;
  • 4比5小,放在5的左边;
  • 2比5小,比4小,放在4的左边;
  • 0比5小,比4小,比2小,放在2的左边;
  • 出现了不平衡,4的左边有2层,右边有0层,进行LL旋转,让4往右旋转;
    1LL旋转
  • 继续,3比5小,比2大,比4小,放在4的左边;
  • 出现了不平衡,5的左边有3层,右边有1层,进行LR旋转,让2下来,4上去,5在往右旋转;
    2LR旋转
  • 继续,1比4小,比2小,比0大,放在0的右边;
  • 6比4大,比5大,比7小,放在7的左边;
  • 出现了不平衡,5的左边有0层,右边有2层,进行RL旋转,让6上去,7下来,5在往做旋转;
    3RL旋转
  • 构建完成。
    完成构建平衡二叉树

练习:构建平衡二叉树

用130、7、20、40、50、75、19、62、53、176构建平衡二叉树。

  • 130作为根节点;
  • 7比130小,放在130的左边;
  • 20比130小,比7大,放在7的右边;
  • 出现不平衡,130左边有2层,有比那有0层,进行LR旋转:
    • 7下来,20上去;
    • 130在右旋转;
      练习1LR旋转
  • 继续,40比20大,比130小,放在130的左边;
  • 50比20大,比130小,比40大,放在40的右边;
  • 出现不平衡,130左边有2层,右边有0层,进行LR旋转:
    • 让40下来,50上去;
    • 130在进行右旋转;
      练习2LR旋转
  • 继续,75比20大,比50大,比130小,放在130的左边;
  • 出现不平衡,20左边有1层,右边有3层,进行RR旋转:
    • 让20进行左旋转;
      练习3RR旋转
  • 继续,19比50小,比20小,比7大,放在7的右边;
  • 62比50大,比130小,比75小,放在75的左边;
  • 出现不平衡,130左边有2层,右边有0层,进行LL旋转:
    • 让130进行右旋转;
      练习4LL旋转
  • 继续,53比50大,比75小,比62小,放在62的左边;
  • 176比50大,比75大,比130大,放在130的右边;
  • 完成构建。
    练习完成构建

平衡二叉树的缺点

每次来个节点都要一路检测到根节点是否平衡,消耗计算机性能。

红黑树

红黑树又叫最优二叉树。

特点:
即不消耗计算机的性能,又使时间复杂度稳定在O(logn)。
整个构建节点不是红色就是黑色,根节点永远是黑色;
从根节点到任意叶子节点路径上黑色节点数目是相同的;
叶子节点都是黑色,而且值是null;
在这里插入图片描述
在红黑树上,从根节点到叶子节点没有一条路径比其他路径长度超过两倍;

  • 最长:黑+红+黑+红+黑+红+叶子
  • 最短:黑+黑+黑+叶子

可由2-3-4树转换为红黑树,2-3-4树存储的value值是有序的,且是从下往上构建。

二节点

存一个数值,存两个地址,分两个叉。
二节点

三节点

存两个数值,存三个地址,分三个叉。
三节点

四节点

存三个数值,存四个地址,分四个叉。
四节点

构建2-3-4树

使用1330、7、20、40、11、75、19、62、53、176、48、29、99、200、120构建-3-4树,步骤如下:

  1. 130是一个二节点;
  2. 7小于130,放在前面,7和130是三节点;
  3. 20比7大,比130小,放在中间,7、20、130是四节点;
  4. 40比20大,比130小,放在40和130的中间;
  5. 7、20、40、130没有存四个数值的节点,所以把中间值往上挤;
    40上移
  6. 11比40下,往左边比较,比7大,比20小,放在7个20的中间;
  7. 75比40大,往右边比较,比130小,放在130的左边;
  8. 19比40下,往左边比较,比11大,比20小,放在11和20的中间;
  9. 7、11、19、20没有存4个数值的节点,中间值往上移,选11和19都可,但习惯将后面的上移;
    19上移
  10. 62比40大,往右边比较,比75小,放在75的左边;
  11. 53比40大,往右边比较,比62小,放在62的左边;
  12. 53、62、75、130没有存4个数值的节点,75上移;
    75上移
  13. 176比75大,往最右边比,比130大,放在130的右边;
  14. 48介于40和75之间,往53、62比较,比53小,放在53的左边;
  15. 29介于19和40之间,往20这放,比20大,放在20的右边;
  16. 99比75大,往最右边比,比130小,放在130的左边;
  17. 200比75大,往最右边比,比176大,放在176的右边;
  18. 99、130、176、200没有存4个数值的节点,176上移;
    在这里插入图片描述
  19. 19、40、75、176没有存4个数值的节点,75上移;
    75再次上移
  20. 120比75大,比176小,介于99和130,放在99和130中间;
  21. 完成构建2-3-4树。
    完成构建2-3-4树

2-3-4树转换红黑树

将2-3-4树转换红黑树,有转换机制:

  • 二节点会被转换为黑色节点;
    二节点转换
  • 三节点会被转换为一个黑色节点和一个红色节点,有两种转换结果:
    • 黑色是小的节点,红的是大的节点;
    • 红的是小的节点,黑色是大的节点;
      三节点转换
  • 四节点会被转换为一个黑色节点和两个红色节点,一大一小数值放在红色中,中间数值放在黑色中;
    四节点转换

构建红黑树

将上面构建成功的2-3-4树转换成红黑树,过程如下;
2-3-4树

  1. 75二节点,转换为黑色;
  2. 176是二节点,转换为黑色;
  3. 19和40是三节点,转换为一黑一红;
    19、40转换
  4. 7和11是三节点,转换为一黑一红;
    7、11转换
  5. 20和29是三节点,转换为一黑一红;
    20、29转换
  6. 48、53、62是四节点,转换为一黑两红;
    48、53、62转换
  7. 99、120、130是三节点,转换为一黑两红;
    99、120、130转换
  8. 200二节点,转换为黑色;
  9. 完成构建红黑树。
    红黑树构建完成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值