二叉查找树算法
1. contains操作
public boolean contains(T x){
return contains(x,root);
}
private boolean contains(T x , BinaryNode<T> t){
if(t==null) {
return false;
}
int compareResult = x.compareTo(t.element);
if(compareResult<0){
return contains(x,t.left);
}else if(compareResult>0){
return contains(x,t.right);
}else return true;
}
2 . FindMin 和FindMax 操作
2.1 FindMin
public T findMin(){
if (isEmpty()) throw new BufferUnderflowException();
return findMin(root).element;
}
private BinaryNode<T> findMin(BinaryNode<T> t){
if (t==null){
return null;
}
if(t.left == null){
return t;
}else
return findMin(t.left);
}
2.2 FindMax
public T findMax(){
if(isEmpty()) throw new BufferUnderflowException();
return findMax(root).element;
}
private BinaryNode<T> findMax(BinaryNode<T> t){
if (t==null){return null;}
while (t.right!=null){
t=t.right;
}
return t;
}
3 .insert 插入操作
public void insert(T x){
root = insert(x,root);
}
private BinaryNode<T> insert(T x ,BinaryNode<T> t){
if (t==null){
return new BinaryNode<T>(x,null,null);
}
int compareResult = x.compareTo(t.element);
if(compareResult<0){
return insert(x,t.left);
}else if(compareResult>0){
return insert(x,t.right);
}else ;
return t;
}
4 . * 删除操作
public void remove(T x){
root=remove(x,root);
}
private BinaryNode<T> remove(T x, BinaryNode<T> t){
if (t==null){
return null;
}
int compareResult = x.compareTo(t.element);
if(compareResult<0){
t.left = remove(x,t.left);
}else if(compareResult>0){
t.right = remove(x,t.right);
}else if(t.left!=null && t.right!=null){
t.element = findMin(t.right).element;
t.right = remove(x,t.right);
}else {
t = (t.left!=null) ? t.left : t.right;
}
return t;
}
5. 打印二叉树
public void printTree(){
if(isEmpty()){
System.out.println("二叉查找树为空!!!");
}else
printTree(root);
}
private void printTree(BinaryNode<T> t){
if (t!=null){
printTree(t.left);
System.out.println(t.element);
printTree(t.right);
}
}
private void printTree(BinaryNode<T> t){
Queue<BinaryNode> queue = new LinkedList<>();
((LinkedList<BinaryNode>) queue).add(t);
while (queue.size()!=0){
int len = queue.size();
for(int i=0;i<len;i++){
BinaryNode<BinaryNode> temp = queue.poll();
System.out.print(temp.element+" ");
if (temp.left!=null){
((LinkedList<BinaryNode>) queue).add(temp.left);
}else if(temp.right!=null){
((LinkedList<BinaryNode>) queue).add(temp.right);
}
}
System.out.println();
}
}