平衡二叉树也叫平衡二叉搜索树,也称AVL树,特点是:他是一颗空树或者它的做优两个子树的高度差的绝对值不超过1
//结点添加
public void add(treenode node) {
//本结点值大于添加节点,应放在左子结点
if (this.value > node.value) {
if (left == null) left = node;//如果左子结点为空,直接添加
if (left != null) left.add(node);//如果不为空则需要挂在子节点的子结点,迭代添加
}
if (this.value < node.value) {
if (right == null) right = node;
if (right != null) right.add(node);
}
//添加节点后如果(右子树高度-左子树高度大于1) 左旋转
if(rightheigt()-leftheigt()>1)
{
//如果右子树的右子树高度大于右子树的左子树高度
if(right!=null&&right.leftheigt()>right.rightheigt())
{
//右子树进行左旋转
right.leftroate();
leftroate();
}
else leftroate();
return;//一定不要少
}
添加节点后如果(左子树高度-右子树高度大于1) 右旋转
if(leftheigt()-rightheigt()>1) {
//如果左子树的右子树高度大于左子树的左子树高度
if (left != null && left.rightheigt() > left.leftheigt()) {
left.leftheigt();
rightheigt();
} else rightheigt();
}
}
//在树结点类中定义的函数
//返回左子树的高度
public int leftheigt() {
if (left == null) return 0;
return left.leftheigt();
}
//返回左子树的高度
public int rightheigt() {
if (left == null) return 0;
return left.rightheigt();
}
//返回该结点为根结点的树的高度
public int height() {
return Math.max(left == null ? 0 : left.leftheigt(), right == null ? 0 : right.rightheigt()) + 1;
}
//左旋转方法
public void leftroate(){
//以当前结电的值创建新结点
treenode node=new treenode(value);
//把新结点的左结点设置成当前节点的左结点
node.left=left;
//新结点的右结点设置成当前结点右结点的左结点
node.right=right.left;
//当前结点的值设置成右子结点的值
this.value=right.value;
//当前节点的右结点设置成右结点的右结点
this.right=right.right;
//当前结点的左节点设置成新节点
left=node;
}
//右旋转方法
public void rightroate(){
treenode node=new treenode(value);
node.right=right;
node.left=left.right;
value=left.value;
right=node;
left=left.left;
}