红黑树

一、定义:

节点非黑即红

根节点为黑

父子之间不能同时为红

任意节点到叶子节点所经历的黑色节点数目相同

空节点为黑色

操作:

左旋:左边的子节点变成父节点

右旋:右边的子节点变成父节点

插入修复操作分为以下的三种情况,而且新插入的节点的父节点都是红色的:

  1. 叔叔节点也为红色。
    将父节点和叔叔节点与祖父节点的颜色互换,这样就符合了RBTRee的定义。即维持了高度的平衡,修复后颜色也符合RBTree定义的第三条和第四条。下图中,操作完成后祖父节点变成了新的节点。如果祖父节点的父节点不是黑色的话,则继续做修复操作。
  2. 叔叔节点为空,且祖父节点、父节点和新节点处于一条斜线上。
    将子节点进行右旋或者左旋操作,并且和父节点互换颜色。通过该修复操作RBTRee的高度和颜色都符合红黑树的定义。
  3. 叔叔节点为空,且祖父节点、父节点和新节点不处于一条斜线上。
    将子节点进行左旋或者右旋,变成第二种情况

删除修复:只有在删除的节点为黑色时才需要修复

删除修复操作在遇到被删除的节点是红色节点或者到达root节点时,修复操作完毕。

  1. 待删除的节点的兄弟节点是红色的节点。

    由于兄弟节点是红色节点的时候,无法借调黑节点,所以需要将兄弟节点提升到父节点,由于兄弟节点是红色的,根据RBTree的定义,兄弟节点的子节点是黑色的,就可以从它的子节点借调了。

  2. 待删除的节点的兄弟节点是黑色的节点,且兄弟节点的子节点都是黑色的。
    将兄弟节点变成红色,如果父亲节点为红色需将父亲节点设为新节点,调整颜色。
  3. 待调整的节点的兄弟节点是黑色的节点,且兄弟节点的左子节点是红色的,右节点是黑色的(兄弟节点在右边),如果兄弟节点在左边的话,就是兄弟节点的右子节点是红色的,左节点是黑色的。
    旋转兄弟节点的红色子节点,同时换色。按4处理
  4. 待调整的节点的兄弟节点
    旋转兄弟节点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值