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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章