public class Node {
int value;
Node left;
Node right;
public Node(int value){
this.value=value;
}
/**
* 返回当前节点的高度
* @return
*/
public int hight(){
return Math.max(left==null?0:left.hight(),
right==null?0:right.hight())+1;
}
/**
* 设计思想,
* 如果插入节点大于当前节点,插入右边
* 否则插入左边。
* @param node
*/
public void add(Node node) {
if(node==null){
return;
}
//如果传入节点比当前节点的值小
if(this.value>node.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((
(this.left==null?0:this.left.hight())-
(this.right==null?0:this.right.hight()
))>1){
if(this.left!=null&&(
(this.left.left==null?0:this.left.left.hight())<
(this.left.right==null?0:this.left.right.hight()
))){
this.left.leftRotate();
}
//右旋转
rightRotate();
}else if((
(this.left==null?0:this.left.hight())-
(this.right==null?0:this.right.hight()
))<-1){
if(this.right!=null&&(
(this.right.left==null?0:this.right.left.hight())>
(this.right.right==null?0:this.right.right.hight()
))){
this.right.rightRotate();
}
//左旋转
leftRotate();
}
}
/**
* 左旋转
*/
private void leftRotate() {
Node newNOde=new Node(value);
newNOde.left=this.left;
newNOde.right=this.right.left;
value=this.right.value;
this.left=newNOde;
this.right=this.right.right;
}
/**
* 右旋转
*/
private void rightRotate() {
Node newNOde=new Node(value);
newNOde.right=this.right;
newNOde.left=this.left.right;
value=this.left.value;
this.left=this.left.left;
this.right=newNOde;
}
}
package com.sun.test.Math.binarySortTree;
public class PinghengTree {
public static void main(String[] args) {
int[] a=new int[]{8,9,5,4,6,7};
binarySortTree b=new binarySortTree();
for(int i=0;i<a.length;i++){
Node node=new Node(a[i]);
b.add(node);
}
System.out.println(b.root.hight());
System.out.println(b.root.value);
}
}