二叉排序树
二叉排序树的升级版之平衡二叉树
public void LeftRotate(){
node TempRoot = new node(value);
TempRoot.left=left;
TempRoot.right=right.left;
value=right.value;
left=TempRoot;
right=right.right;
}
public void RightRotate(){
node temp = new node(value);
temp.right=right;
temp.left=left.right;
value=left.value;
left=left.left;
right=temp;
}
public int Lheight(){
if (left!=null){
return left.Height();
}else{
return 0;
}
}
public int Rheight(){
if (right!=null){
return right.Height();
}else {
return 0;
}
}
public int Height(){
return Math.max(left==null?0:left.Height(), right==null?0:right.Height())+1;
}
public void add(node Node){
if (Node==null){
return;
}
if (Node.value<this.value){
if (this.left==null){
this.left=Node;
}else {
this.left.add(Node);
}
}else {
if (this.right==null){
this.right=Node;
}else {
this.right.add(Node);
}
}
if (Rheight()-Lheight()>1){
if (right!=null&&right.Lheight()>right.Rheight())
{
right.RightRotate();
}
LeftRotate();
}
if (Lheight()-Rheight()>1){
if (left.Rheight()>left.Lheight()){
left.LeftRotate();
}
RightRotate();
}
}
