红黑树的结点插入
cur为当前结点,p为父节点,g为祖父结点,u为叔叔结点
情况一
cur为红色,p为红色,g为黑色,u存在且为红色
调整前
调整后
调整方式:
将p结点和u结点调整为黑色,将g结点改为红色
将cur指向g结点,将p结点指向cur的p结点,继续向上调整
情况二
cur为红,p为红,g为黑,u不存在/u为黑
调整前
调整后
调整方式:
p为g的左孩子,cur为p的左孩子,则进行右单旋转;
相反, p为g的右孩子,cur为p的右孩子,则进行左单旋转
p、g变色–p变黑,g变红
情况三
cur为红,p为红,g为黑,u不存在/u为黑
调整前
调整后
调整方式:
p为g的左孩子,cur为p的右孩子,则针对p做左单旋转;
相反, p为g的右孩子,cur为p的左孩子,则针对p做右单旋转
则转换成了情况2