二叉搜索树类
import java.util.Comparator;
public class BinarySearchTree<E>{
private int size;
private Node<E> root;
private Comparator<E> comparator;
private class Node<E>{
Node<E> left;
Node<E> right;
Node<E> parent;
E element;
public Node(Node<E> parent,E element){
this.parent = parent;
this.element = element;
}
}
public BinarySearchTree(){
this(null);
}
public BinarySearchTree(Comparator<E> comparator){
this.comparator = comparator;
}
public void add(E element){
elementNotNullCheck(element);
if(root == null){
root = new Node<E>(null,element);
size++;
return;
}
Node<E> parent = null;
Node<E> node = root;
int cmp = 0;
while(node != null){
cmp = compare(element,node.element);
parent = node;
if(cmp > 0){
node = node.right;
}else if(cmp < 0){
node = node.left;
}else{
node.element = element;
return;
}
}
Node<E> newNode = new Node<E>(parent,element);
if(cmp > 0){
parent.right = newNode;
}else{
parent.left = newNode;
}
size++;
}
private int compare(E e1,E e2){
if(comparator != null){
return comparator.compare(e1,e2);
}
return ((Comparable<E>)e1).compareTo(e2);
}
private void elementNotNullCheck(E element){
if(element == null){
throw new IllegalArgumentException("element must not be null");
}
}
public String toString(){
StringBuilder sb = new StringBuilder();
toString(sb,root,"");
return sb.toString();
}
public String toString(StringBuilder sb,Node<E> node,String prefix){
if(node == null)return sb.toString();
sb.append(prefix)
.append("【").append(node.element).append("】")
.append("\n");
toString(sb,node.left,prefix + "【L】");
toString(sb,node.right,prefix + "【R】");
return sb.toString();
}
}
测试类
public class Test {
public static void main(String[] args){
Integer[] data = new Integer[]{
7,4,9,2,5,8,11,3,12,1
};
BinarySearchTree<Integer> bst = new BinarySearchTree<Integer>();
for(int i = 0;i < data.length;i++){
bst.add(data[i]);
}
System.out.println(bst);
}
}
要测试的二叉搜索树
测试截图