红黑树删除

红黑树的删除过程类似于二叉搜索树,但需在删除后调整以保持红黑树性质。删除结点后可能破坏性质,通过四种情况分别进行调整:1) 兄弟结点w红色,交换w和父结点颜色并左旋;2) w黑色且两子节点黑色,w变红,x指向上级;3) w黑色,左子红色,交换颜色并右旋w;4) w黑色,右子红色,交换颜色,w变黑,左旋父结点。最后将根结点设为黑色,确保性质满足,整体时间复杂度O(lg n)。
摘要由CSDN通过智能技术生成

红黑树的删除和搜索二叉树的有些类似,但是也有很大的不同,主要的就是,红黑树删除以后会破坏红黑树的性质,需要就行调整。

一、从一棵红黑树中删除结点的过程是基于二叉搜索树的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 =
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值