红黑树的两种基本操作
做旋转和右旋转,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.youkuaiyun.com/v_july_v/article/details/6105630