网上找了一些源码都有些错误,自己写吧
首先建立树节点
public class TreeNode {
int value;
TreeNode left;
TreeNode right;
public TreeNode(int value){
this.value=value;
}
public void setNode(TreeNode left,TreeNode right){
this.left=left;
this.right=right;
}
}
二叉平衡树的增删
public class TreeDemo {
// 查找
static boolean flag=false;
// 递归方式
public void SearchBST(TreeNode root,int value) {
if(root==null){
flag=false;
return;
}
if(root.value>value)
SearchBST(root.left, value);
else if(root.value<value)
SearchBST(root.right, value);
else
flag=true;
}
// 非递归方式
public void SearchBST2(TreeNode root,int value) {
while(root!=null){
if(root.value>value)
root=root.left;
else if(root.value<value)
root=root.right;
else{
flag=true;
break;
}
}
}
// 插入节点
public TreeNode InsertBST1(TreeNode root,int value) {
if(root==null)
return new TreeNode(value);
if(root.value>value)
root.left=InsertBST1(root.left, value);
else if(root.value<value)
root.right=InsertBST1(root.right, value);
return root;
}
// 中序输出
public void order(TreeNode root) {
if(root==null)
return;
if(root.left!=null)
order(root.left);
System.out.print(root.value+",");
if(root.right!=null)
order(root.right);
}
public TreeNode DeleteBST(TreeNode root,int value){
if(root==null)
return root;
if(root.value>value)
root.left=DeleteBST(root.left, value);
else if(root.value<value)
root.right=DeleteBST(root.right, value);
else{
if(root.left==null&&root.right==null)
root=null;
else if(root.left!=null&&root.right==null)
root=root.left;
else if(root.left==null&&root.right!=null)
root=root.right;
else{
TreeNode n=root.left;
int temp=n.value;
while(n!=null){
temp=n.value;
n=n.right;
}
DeleteBST(root,temp);
root.value=temp;
}
}
return root;
}
public static void main(String[] args) {
TreeDemo t=new TreeDemo();
TreeNode t1=new TreeNode(1);
TreeNode t2=new TreeNode(2);
TreeNode t3=new TreeNode(3);
TreeNode t4=new TreeNode(4);
TreeNode t5=new TreeNode(5);
TreeNode t6=new TreeNode(6);
TreeNode t7=new TreeNode(7);
TreeNode t8=new TreeNode(8);
TreeNode t9=new TreeNode(9);
t8.setNode(t4, t9);
t4.setNode(t2, t6);
t2.setNode(t1, t3);
t6.setNode(t5, t7);
//order(t4);
//t.SearchBST2(t4,2);
TreeNode n=t.DeleteBST(t8,8);
t.order(n);
}
}