红黑树--插入:https://blog.csdn.net/weixin_51066286/article/details/119006071
必备知识:
1.树的右旋和左旋
2.二叉树
3.前继结点和后继结点
仅供参考
我们直接来看,删除分有哪几种情况
删除情况:
1 删除的是末端的红色结点,可以直接删除
2 删除的是末端的黑色右结点
2.1 父结点是黑色,兄弟结点为黑色
2.1.1 将兄弟左结点改为黑色,并将父结点右旋
2.2 父结点红色,兄弟结点为黑色
2.2.1 兄弟结点的左结点若为红色,则将兄弟结点下的左结点和父结点与兄弟结点颜色互换,再将父结点右旋
2.2.2 兄弟结点只有右结点且红色,则将兄弟结点和兄弟结点右结点颜色互换并将兄弟结点左旋
2.2.2.1 旋转后的情况符合情景2.2.1,执行2.2.1操作
2.3 父结点是黑色,兄弟结点为红色,将兄弟结点和父结点颜色互换,并将父结点进行右旋
2.3.1 旋转后的兄弟结点没有子结点,则将父结点和兄弟结点颜色互换
2.3.2 旋转后的兄弟结点只有右结点,则将兄弟结点和兄弟结点右结点颜色互换并将兄弟结点左旋
2.3.2.1 旋转后的情况符合2.2.1情景,执行2.2.1操作
2.3.3 旋转后的兄弟结点下的左结点若为红色,执行2.2.1操作
3 删除的是末端的黑色左结点(与2情况一样只不过操作方向都相反而已)
4 删除的不是末端的结点
4.1 找出前继结点(或者后继结点)
4.2 然后用前继结点(或者后继结点)代替要删除的结点
4.3 要删除的结点是什么颜色,代替结点就是什么颜色
4.4 然后删除前继结点(或者后继结点),本质上是结末端的结点 进行删除,然后回到2步骤
注意:在这里强调一点是,不管是旋转前再互换颜色,都要明确要对哪个结点和哪个结点颜色进行互换。
我们拿一个图来说明一些概念
下面我们来挨个演示以上的删除情景
1 删除的是末端的红色结点,可以直接删除
2 删除的是末端的黑色右结点
1 父结点是黑色,兄弟结点为黑色
2.2 父结点红色,兄弟结点为黑色
2.2.1 兄弟结点的左结点若为红色,则将兄弟结点下的左结点和父结点与兄弟结点颜色互换,再将父结点右旋
注意:在这里强调一点是,不管是旋转前还是互换颜色后,都要明确要对哪个结点和哪个结点颜色进行互换。下面不再强调。
2.2.2 兄弟结点只有右结点且红色,则将兄弟结点和兄弟结点右结点颜色互换并将兄弟结点左旋
2.3 父结点是黑色,兄弟结点为红色,将兄弟结点和父结点颜色互换,并将父结点进行右旋
2.3.1 旋转后的兄弟结点没有子结点,则将父结点和兄弟结点颜色互换
2.3.2 旋转后的兄弟结点只有右结点,则将兄弟结点和兄弟结点右结点颜色互换并将兄弟结点左旋
2.3.2.1 旋转后的情况符合2.2.1情景,执行2.2.1操作
2.3.3 旋转后的兄弟结点下的左结点若为红色,执行2.2.1操作
4 删除的不是末端的结点