自己设计一颗二叉树,实现insert,findMin,findMax,remove,contains,printTree方法
package com.org.Tree;
//二叉查找树
public class BinarySearchTree<AnyType extends Comparable<? super AnyType>> {
private BinaryNode<AnyType> root;
//初始化二叉树
public BinarySearchTree(){
root = null;
}
//使树为空
public void makeEmpty(){
root = null;
}
//判断是否为空
public boolean isEmpty(){
return root == null;
}
//查找树中是否含有x
public boolean contains(AnyType x){
return contains(x,root);
}
private boolean contains(AnyType x,BinaryNode<AnyType> 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;
}
//查找最小元素
public AnyType findMin(){
if(isEmpty())
throw new ArrayIndexOutOfBoundsException();
return findMin(root).element;
}
private BinaryNode<AnyType> findMin(BinaryNode<AnyType> t){
if(t == null)
return null;
else if(t.left == null)
return t;
return findMin(t.left);
}
//查找最大元素
public AnyType findMax(){
if(isEmpty())
throw new ArrayIndexOutOfBoundsException();
return findMax(root).element;
}
private BinaryNode<AnyType> findMax(BinaryNode<AnyType> t){
if(t != null)
while(t.right != null)
t = t.right;
return t;
}
//插入元素
public void insert(AnyType x){
root = insert(x,root);
}
private BinaryNode<AnyType>insert(AnyType x,BinaryNode<AnyType> t){
if(t == null)
return new BinaryNode<AnyType>(x, null, null);
int compareResult = x.compareTo(t.element);
if(compareResult < 0)
t.left = insert(x,t.left);
else if(compareResult >0)
t.right = insert(x,t.right);
else
;
return t;
}
//删除元素
public void remove(AnyType x){
root = remove(x,root);
}
private BinaryNode<AnyType> remove(AnyType x,BinaryNode<AnyType>t){
if(t == null)
return t;
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(t.element,t.right);
}else
t = (t.left != null)?t.left:t.right;
return root;
}
//打印树
public void printTree(){
printTree(root);
}
private void printTree(BinaryNode<AnyType> t){
if(t!=null){
System.out.println(t.element);
printTree(t.left);
printTree(t.right);
}
}
//二叉树节点类
@SuppressWarnings("unused")
private static class BinaryNode<AnyType>{
AnyType element;
BinaryNode<AnyType> left;
BinaryNode<AnyType> right;
BinaryNode(AnyType theElement){
this(theElement,null,null);
}
BinaryNode(AnyType theElement,BinaryNode<AnyType> lt,BinaryNode<AnyType> rt){
element = theElement;
left = lt;
right = rt;
}
}}