红黑树的插入调整(以插入节点的父节点是左子节点为例)
前言
参考 【完整版】最全最新红黑树讲解,数组、链表、二叉树、AVL树、红黑树_哔哩哔哩_bilibili、
被插入的节点都会设置为红色,然后再在修复过程中调整相关节点的颜色。
如果被插入的节点是根节点,只需要将新插入节点的颜色设置为黑色即可。
如果被插入的节点的父节点是红色节点,那么就需要需要调整红黑树结构(红色节点的子节点不能是红色),这就有以下几种情况
(下图的X代表被插入节点,F代表被插入节点的父节点,G代表被插入节点的父节点的父节点,B代表被插入节点的兄弟节点):
一、父节点的兄弟节点是黑色节点,或父节点不存在兄弟节点(null也可以被视为黑色节点),且插入的节点是左孩子
这种情况下,只需要将父节点的颜色设置为黑色,父节点的父节点设置为红色,然后右旋父节点的父节点即可
先这样

再这样

二、父节点的兄弟节点是黑色节点,或父节点不存在兄弟节点(null也可以被视为黑色节点),且插入的节点是右孩子

这种情况下,只需要先将插入节点的颜色设置为黑色,然后将父节点的父节点设置为红色,再左旋父节点,然后右旋被插入节点即可
先这样

再这样

最后这样

二、父节点的兄弟节点是红色节点
这个样子

或这个样子

这种情况下,只需要将父节点和父节点的兄弟节点的颜色设置为黑色,父节点的父节点设置为红色,然后将父节点的父节点当作新插入节点,进行递归处理即可。
(以被插入节点是左孩子为例)
先这样:

然后递归处理父节点的父节点

浙公网安备 33010602011771号