二叉搜索树

定义

二叉搜索树(Binary Search Tree),(又:二叉查找树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树 

 删除操作

1.删除的节点是叶子节点:直接删除。如3/6/11/18/20节点

2.删除的节点只有一个子节点:子节点替换被删除的节点。如删除10节点后,应该为:

 

3. 删除的节点有两个子节点,找到被删除节点的后继(即按大小排序后的下一个节点)节点,用其替换。如删除17节点后,应该为:(若18节点下还有其它节点,则仍然按照删除规则先行做变化)

 

 

平衡二叉树

定义

平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树AVL替罪羊树Treap伸展树等。

为什么需要平衡?

树的旋转

1.rr的情况,bf(平衡因子)为-2,需要进行左旋操作

  

 

2.ll的情况,bf(平衡因子)为2,需要进行右旋操作

      

 

3.lr的情况,bf(平衡因子)为2,需要先进行左旋操作,再进行右旋操作

4.rl的情况,bf(平衡因子)为-2,需要先进行右旋操作,再进行左旋操作

      

 

红黑树

转载自:https://blog.csdn.net/tanrui519521/article/details/80980135

红黑树与AVL树的比较

1.AVL树的时间复杂度虽然优于红黑树,但是对于现在的计算机,cpu太快,可以忽略性能差异
2.红黑树的插入删除比AVL树更便于控制操作
3.红黑树整体性能略优于AVL树(红黑树旋转情况少于AVL树)

红黑树的性质
红黑树是一棵二叉搜索树,它在每个节点增加了一个存储位记录节点的颜色,可以是RED,也可以是BLACK;通过任意一条从根到叶子简单路径上颜色的约束,红黑树保证最长路径不超过最短路径的二倍,因而近似平衡

具体性质如下:

1.每个节点颜色不是黑色,就是红色
2.根节点是黑色的
3.如果一个节点是红色,那么它的两个子节点就是黑色的(没有连续的红节点)
4.对于每个节点,从该节点到其后代叶节点的简单路径上,均包含相同数目的黑色节点
那么为什么当满足以上性质时,就能保证最长路径不超过最短路径的二倍了呢?我们分析一下:

这里写图片描述

最短路径就是全黑节点,最长路径就是一个红节点一个黑节点,最后黑色节点相同时,最长路径刚好是最短路径的两倍。

红黑树的插入
红黑树插入节点过程大致分析:

  • RBTree为二叉搜索树,我们按照二叉搜索树的方法对其进行节点插入
  • RBTree有颜色约束性质,因此我们在插入新节点之后要进行颜色调整

具体步骤如下:

1.根节点为NULL,直接插入新节点并将其颜色置为黑色
2.根节点不为NULL,找到要插入新节点的位置
3.插入新节点
4.判断新插入节点对全树颜色的影响,更新调整颜色
       首先红黑树的插入其实不是那么容易实现的,以前搜索树的插入我们很容易理解现在我们首先思考一个问题,你插入节点的默认颜色是RED或BLACK? 这里我们需要根据性质来思考,首先如果插入黑节点,这个可以直接插入无论它的父亲是什么颜色,但是红黑树的性质是每条路径的黑色节点数目相同,这个时候你再想想那其他路径的黑色节点数目一定比你现在少一个节点,所以调整起来是非常繁琐的.。插入红节点不需要调整其他路径,如果它的父亲为黑,那么直接插入,如果他的父亲为红那么在该路径上面开始分情况调整.。所以插入节点默认颜色一定要为红,如果为黑调节成本太大了。
        接下来开始插入节点,如果插入节点的父亲为黑那么直接插入后返回,不需要做任何调整。但是如果插入节点的父亲为红,那么就需要调整了.具体的调整过程可以分为三个情况:

1.第一种情况
cur为红,parent为红,pParent为黑,uncle存在且为红
则将parent,uncle改为黑,pParent改为红,然后把pParent当成cur,继续向上调整。

此时对该子树进行操作,parent节点和uncle节点变为黑,pParent节点变为红,这样我们就保证该子树中每条路径中黑色节点相同并且没有连续的红节点,然后再让cur等于pParent节点继续往上继续调整。

这里写图片描述

2. 第二种情况
cur为红,parent为红,pParent为黑,uncle不存在/u为黑
parent为pParent的左孩子,cur为parent的左孩子,则进行右单旋转;

uncle不存在:

uncle存在且为黑:

3.第三种情况
cur为红,p为红,g为黑,u不存在/u为黑
p为g的左孩子,cur为p的右孩子,则针对p做左单旋转
则转换成了情况2

uncle不存在:

uncle存在且为黑:

相反,p为g的右孩子,cur为p的左孩子,则针对p做右单旋转
则转换成了情况2
uncle不存在:

uncle存在且为黑:

红黑树插入总结

B/B+树

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值