红黑树插入

红黑树,二叉平衡树数据结构的变种,是搜索效率和插入删除效率的中间妥协产物,在保证搜索效率O(log2n)的基础上,减少插入和删除频繁平衡树结构带来的性能开销。包含以下五点性质:

1)每个结点要么是红的,要么是黑的。
2)根结点是黑的。
3)每个叶结点,即空结点(NIL)是黑的。
4)红色节点的子节点必须是黑色,保证了相邻节点不能同为红色,但可以是黑色
5)对每个结点,从该结点出发到叶子节点的所有路径上包含相同数目的黑结点。

其中前三点是能够轻易保证的,但是在插入和删除时会打破定义45,因此为了保证满足定义,需要红黑树实现自平衡,通过左旋和右旋(调节父子关系)来实现平衡。

固定父节点右旋(父子关系对调,子节点绕着父节点顺时针旋转),左旋对称同理

固定祖父节点右旋(祖父和父节点的父子关系对调,与上同理),左旋对称同理

插入情况分三种:插入节点默认为红色

1)父节点是黑色,直接插入,不作其他操作

2)父节点是红色,父节点的兄弟节点即叔节点也是红色,修改父节点和叔节点为黑色,祖父节点为红色,以祖父节点作为新的插入节点,迭代插入过程

3)父节点是红色,叔节点为黑色,其中包括四种情况:LL、RR、LR、RL,表示祖父节点与父节点、插入节点的关系,例如LR代表祖父节点的左孩子是父节点,父节点的右孩子是插入节点

i. LL :固定祖父节点右旋,祖父节点变红色,父节点变黑色

ii. RR:与i是对称关系,固定祖父节点左旋,变色处理相同

iii LR: 固定父节点左旋,再固定祖父节点右旋,插入节点变黑色,祖父节点变红色

iv RL: 与iii是对称关系,固定父节点右旋,再固定祖父节点左旋,变色处理相同

以一个例子来说明,如下图所示:依次插入35、25、15、9、22、5、20、24、21

1)插入35,根节点为黑色,不做其他处理,结果如下

2)插入25、15,插入25时父节点为黑色(case 1),不作处理,插入15时满足LL(case 3-i),固定祖父节点对父节点右旋,最后父节点变黑色,祖父节点变红色,结果如下

 

3)插入9,父节点和叔节点为红色(case 2),父叔变黑,祖父变红(变色时可以加判断,若为根节点则变黑色),迭代过程,这里可以设置终止条件(如果插入节点的祖父节点不存在,则停止迭代),结果如下

4)插入22,父节点是黑色(case 1),不做其他处理

 

 5)插入5,父叔为红(case 2),则父叔变黑,祖父变红,以祖父节点作为插入节点迭代过程,由于祖父节点为空这里直接终止了

 

 6)插入20,24,父节点为黑色(case 1),不做其他操作

 

7)插入21,同理需要变色(case 2),然后以祖父节点作为插入节点插入,符合LR(case 3 -iii),固定插入节点的父节点左旋,然后以插入节点的祖父节点为基础右旋,最后插入节点变黑色,祖父节点变红色

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值