代码如下(附有注释):
package DataStructureDemo.com.ds.tree;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class BinarySearchTree<E extends Comparable<E>> {
private class Node{
E val;
Node left,right;
Node(E val) {
this.val = val;
}
}
private Node root;//二叉搜索树的根结点
private int size;//二叉搜索树中元素个数
//构造器,默认生成一个空二叉搜索树
private BinarySearchTree() {
this.root = null;
this.size = 0;
}
public int getSize() {
return size;
}
public boolean isEmpty(){
return this.size == 0;
}
//向二分搜索树中添加新元素
public void add(E e){
root = add(root,e);
}
//向以node为根结点的树中插入元素e(递归)
//返回插入新节点后二叉树的根
private Node add(Node node,E e){
if(node == null){
size++;
return new Node(e);
}
//要插入元素小于根节点值,使用递归
if(e.compareTo(node.val) <0){
node.left = add(node.left,e);
}else if(e.compareTo(node.val) >0){
//要插入元素大于根节点值
node.right = add(node.right,e);
}
return node;
}
//二叉搜索树中是否包含元素e
public boolean contains(E e){
return contains(root,e);
}
//看以node为根结点的二叉搜索树是否包含元素e(递归)
private boolean contains(Node node,E e){
if(node == null){
return false;
}
if(e.compareTo(node.val) == 0){
return true;
} else if(e.compareTo(node.val) <0) {
return contains(node.left,e);
} else {
return contains(node.right,e);
}
}
//二叉搜索树的前序遍历
public void PreOrder(){