java实现二叉平衡树

网上找了一些源码都有些错误,自己写吧

首先建立树节点

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);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值