红黑树左旋代码摘抄(非完整版)

public class test {
	private final int R=0;//红色
	private final int B=1;
	
	private Node root;//树的根节点
	
	class Node{
		int data;
		int color=R;//每次插入一定是红色
		Node left;
		Node right;
		Node parent;
		
		public Node(int data)
		{
			this.data=data;
		}
	}
	//root是我们先默认的第一个点
	public void insert(Node root,int data)
	{
		if(root.data<data) //插入到右子树
		{
			if(root.right==null)
				root.right=new Node(data);
			else insert(root.right,data);
		}
		else
		{
			if(root.left==null)
				root.left=new Node(data);
			else insert(root.left,data);
		}
	}
	
	public void leftRotate(Node node)//左旋->修改各个节点的指针
	{
		//分两种情况
		//  没有父节点->自己就是根节点->根节点转
		if(node.parent==null)//根节点,没有parent
		{
			Node right=root.right;//取得S点
			root.right=right.left;//S的左子树逆时针旋转变为E的右子树,由root从上连向下
			right.left.parent=root;//S的左子树挂到E点上,parent变为R 由下连向上
			root.parent=right;//S点上浮变成新的根节点
			right.parent=null;	//变成新的根节点->没有parent
		}
		//有父节点->有根节点
		else
		{
			//判断该点是左子树还是右子树
			if(node==node.parent.left)//左子树
				node.parent.left=node.right;//把S浮上来变成新的左子树
			else//右子树
				node.parent.right=node.right;
		}
		node.right.left.parent=node;//S点原来的左子树会挂到E上面 由下连到上
		node.right.parent=node.parent;//S点上浮 变成E的父节点
		node.parent=node.right;//S变为E的parent
		node.right=node.right.left;//由上连到下
		node.parent.left=node;//修改根节点的指针	
	}

等有时间再改 摘抄了一部分 非完整代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值