红黑树

49 篇文章 0 订阅
19 篇文章 0 订阅


红黑树的两种基本操作

做旋转和右旋转,LEFT_ROTATE(x)和RIGHT_ROTATE(x)分别表示以x为支点进行左旋转和右旋转。



红黑树的插入操作

以插入点为当前点(z),检查是否满足红黑树规则,如果不满足则调整,直至完全满足为止。

根据当前点z的父节点和叔叔节点的颜色,可以分为均为红色以及叔叔节点为黑色的情况,而根据当前节点是父节点的做节点还是右节点分为两种情况。另外,父节点是祖父节点的左节点还是右节点又分为两种情况,因此一共有六种情况。

Case 1.1 父节点为祖父节点的左节点,叔叔节点为红色

Case 1.2 父节点为祖父节点的左节点,叔叔节点为黑色,z为父节点的右节点

Case 1.3 父节点为祖父节点的左节点,叔叔节点为黑色,z为父节点的左节点

Case 2.1 父节点为祖父节点的右节点,叔叔节点为红色

Case 2.2 父节点为祖父节点的右节点,叔叔节点为黑色,z为父节点的左节点

Case 2.3 父节点为祖父节点的右节点,叔叔节点为黑色,z为父节点的右节点

其实,Case 1.*和Case 2.*是互为镜像的,处理方式也是对称的。同时,根据定义好的算法,Case *.2处理完一定是到达Case *.3。

我们来看这六种情形的处理方式。

Case 1.1 父节点为祖父节点的左节点,叔叔节点为红色


Case 1.2 父节点为祖父节点的左节点,叔叔节点为黑色,z为父节点的右节点


Case 1.3 父节点为祖父节点的左节点,叔叔节点为黑色,z为父节点的左节点


Case 2.1 父节点为祖父节点的右节点,叔叔节点为红色


Case 2.2 父节点为祖父节点的右节点,叔叔节点为黑色,z为父节点的左节点


Case 2.3 父节点为祖父节点的右节点,叔叔节点为黑色,z为父节点的右节点



红黑树的节点删除

(未完待续)


参考:

1. 《算法导论》

2. http://blog.csdn.net/v_july_v/article/details/6105630

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值