红黑树

一.什么是红黑树:

1.红黑树是二叉查找树的一种,将二叉树的节点给他标上red和black两种颜色。
2.二叉树有退化成链表的可能,红黑树是一种近似平衡的树。
例如下面这颗树:
在这里插入图片描述

二.红黑树性质

所谓的红黑树,只需要满足一些特有的性质,那我们就将他称为红黑树。网上很多五个性质。
1.这课树的节点只能是红色或者黑色两种颜色。
2.根节点必须是黑色
3.不可以有连在一起的红色节点
4.所有红色节点的子结点都是黑色,叶子结点(null结点)也是黑色的。
随便来个红黑树:
在这里插入图片描述

三.左旋和右旋

1.左旋:

以A作为根节点,旋转三部走。
在这里插入图片描述
第一步:动C结点,将C的父结点设为A
第二部:动B结点,将B的左孩子设为A,将B的父结点设为A的父结点。
第三部:动A结点,将A的右孩子设为C,将A的父结点设为B结点。

2.右旋:

以A作为根节点,旋转三部走。
在这里插入图片描述
第一步:动C结点,将C的父结点设为A
第二部:动B结点,将B的右孩子设为A,将B的父结点设为A的父结点。
第三部:动A结点,将A的左孩子设为C,将A的父结点设为B结点。
剩下的只是将中文翻译成代码:

旋转代码:

//左旋

    //以形参node做为根旋转。
	public void leftRotate(Node node){
		if(node.parent == null){
			Node A = node;     //根节点
			Node B = A.right;  //根节点的右节点
			
			//移动三部曲:动B的左节点
			//第一步
			B.left.parent = A;
			
			//第二部:动B节点
			B.left = A;
			B.parent = null;
			
			//三部曲:动A节点
			A.parent = B;
			A.right = B.left;
		}
	}
	
	
	//右旋
	//以形参node做为根旋转。
	public void rightRotate(Node node){
		if(node.parent == null){
			Node A = node;
			Node S = node.left;
			
			//移动三部曲:动B的右节点
			//一部曲
			B.right.parent = A;
			
			//二部曲:动B节点
			B.right = A;
			B.parent = null;
			
			//三部曲:动A节点
			A.parent = B;
			A.left = B.right;
		}
	}

下次需要使用左旋或右旋只需调用方法即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值