二叉搜索树的接口类

public interface BinarySearchTree extends BinaryTree
{
    Object find(Object obj);
    Object update(Object obj);
    boolean insert(Object obj);
    boolean delete(Object obj);
    void ascend();
}

二叉搜索树的链接存储类的实现

public class LinkBinarySearchTree extends LinkBinaryTree
{
	public LinkBinarySearchTree(){
		super();
	}
	public LinkBinarySearchTree(BTreeNode st){
		super(st);
	}
	public Object find(Object obj){
		if(root==null) return null;
		BTreeNode st=root;
		while(st!=null){
			if(((Comparable)obj).compareTo(st.element)==0)
				return st.element;
			else if(((Comparable)obj).compareTo(st.element)<0)
				st=st.left;
			else
				st=st.right;
		}
		return null;
	}
	public Object update(Object obj){
		if(root==null) return null;
		BTreeNode st=root;
		while(st!=null){
			if(((Comparable)obj).compareTo(st.element)==0){
				Object x=st.element;
				st.element=obj;
				return x;
			}
			else if(((Comparable)obj).compareTo(st.element)<0)
				st=st.left;
			else
				st=st.right;
		}
		return null;
	}
	public boolean insert(Object obj){
		BTreeNode st=root,pt=null;
		while(st!=null){
			pt=st;
			if(((Comparable)obj).compareTo(st.element)==0)
				return false;
			else if(((Comparable)obj).compareTo(st.element)<0)
				st=st.left;
			else
				st=st.right;
		}
		BTreeNode s=new BTreeNode(obj);
		if(pt==null) root=s;
		else if(((Comparable)obj).compareTo(pt.element)<0)
			pt.left=s;
		else pt.right=s;
		return true;
	}
	public boolean delete(Object obj){
		if(root==null) return false;
		BTreeNode st=root,pt=null;
		while(st!=null){
			if(((Comparable)obj).compareTo(st.element)==0)
				break;
			else if(((Comparable)obj).compareTo(st.element)<0){
				pt=st;st=st.left;
			}
			else{
				pt=st;st=st.right;
			}
		}
		if(st==null) return false;
		if(st.left==null&&st.right==null){
			if(st==root) root=null;
			else if(pt.left==st) pt.left=null;
			else pt.right=null;
		}
		else if(st.left==null||st.right==null){
			if(st==root)
				if(st.left==null) root=st.right;else root=st.left;
			else if(pt.left==st&&st.left==null) pt.left=st.right;
			else if(pt.left==st&&st.right==null) pt.left=st.left;
			else if(pt.right==st&&st.left==null) pt.right=st.right;
			else if(pt.right==st&&st.right==null) pt.right==st.left;
		}
		else if(st.left!=null&&st.right!=null){
			BTreeNode s1=st,s2=st.left;
			while(s2.right!=null){
				s1=s2;s2=s2.right;
			}
			st.element=s2.element;
			if(s1==st)
				st.left=s2.left;
			else
				s1.right=s2.left;
		}
		return true;
	}
	public void ascend(){traverseBTree("inOrder");}
}

 客户端调试运行代码

 public class Example{
	 public static void main(String[] args)
	 {
		 BinarySearchTree bst=new LinkBinarySearchTree();
		 Integer []a={23,45,89,40,73,12,49,72,20,44};
		 for(int i=0;i