红黑树的删除和搜索二叉树的有些类似,但是也有很大的不同,主要的就是,红黑树删除以后会破坏红黑树的性质,需要就行调整。
一、从一棵红黑树中删除结点的过程是基于二叉搜索树的TreeDelete过程的,首先设计一个Transplant供红黑树调用
public void Rb_Transplant(Node root,Node u,Node v){
if(u.p==null){
root = v;
}else if(u == u.p.left){
u.p.left = v;
}else{
u.p.right = v;
}
v.p = u.p;
}
二、删除过程
红黑树的删除过程和二叉搜索树放入删除过程基本相同,只是在删除后会破坏红黑树的性质,需要进行调整过程,代码如下
public void Rb_Delete(Node root,Node z){
Node y = z;
Node x = null;
String y_original_color = y.color;
if(z.left==null){
x = z.left;
Rb_Transplant(root, z, z.right);
}else if(z.right==null){
x = z.right;
Rb_Transplant(root, z, z.left);
}else{
y = TreeMiniNum(z.right);
y_original_color =