目录
红黑树的生成网址点我
写在前面
图片的X 代变 删除的节点
B 代表他的兄节点
P代表父亲节点
蓝色代表随便颜色未知可能是红色也可能是黑色
删除的概念
首先红黑树的删除,与正常的二叉查找树的删除一样,首先查找到要删除的点,
找出其前继节点(左边树最大的)或是后继节点(右边树最小的)进行值的替换,再将其删除(前继节点和后继节点肯定都是叶子节点,所以可以直接进行删除)。然后,通过"旋转和重新着色"等一系列来修正该树,使之重新成为一棵红黑树。
情况1删除的节点是叶子节点
情况1.1叶子节点是红色
解决方案: 直接删除毫无影响
删除后的情况:
情况1.2叶子节点是黑色
以下情况按我写出的顺序进行处理 有优先级的
情况1.2.1兄黑,右红侄
解决方案:
1:左旋其父
2:祖染父色
3:父叔染黑
4:删除节点
情况1.2.2兄黑,左红侄
进入这个情况,证明右侄子节点是肯定没有的,有的话则是第一种情况
解决方案:
1:右旋其兄
2:兄侄换色
3:回到情况1
情况1.2.3兄黑,双黑侄
其实就是兄弟也是叶子节点,因为不可能有了不然黑色不平衡了
解决方案:
1:兄弟染红
2:递归往上走,遇到红色染黑或是遇到根节点返回
3:删除节点
情况1.2.4 兄红
解决方案:
1:左旋其父
2:父祖换色
3:转换成前三种情况
情况2删除的节点有孩子节点
2.1只有左孩子
解决方案:
1:直接删除提上去替父从军
2.2只有右孩子
解决方案
1:替父从军
2.3有两个孩子
解决方案:
1:与前继节点或是后继节点进行替换
2:以前继节点或是后继节点为操作节点按前面情况进行删除