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;//修改根节点的指针
}
等有时间再改 摘抄了一部分 非完整代码