public class BST<Key extends Comparable<Key>> {
public Node root; //二叉树的根节点
private class Node
{
private Key key; //键
private Node left,right; //指向子树的连接
public Node(Key key)
{
this.key = key;
}
}
public void insertRec(Key key)
{
root = insertRec(root,key);
}
private Node insertRec(Node x,Key key)
{
//如果key存在则结束插入
//否则以key为键值对的新节点插入到该子树中
if(x==null) return new Node(key);
int cmp = key.compareTo(x.key);
if (cmp<0) x.left = insertRec(x.left,key);
else if(cmp>0) x.right = insertRec(x.right,key);
return x;
}
public Key min()
{
return min(root).key;
}
private Node min(Node x)
{
if(x.left == null) return x;
return min(x.left);
}
public void deleteMin()
{
root = deleteMin(root);
}
private Node deleteMin(Node x)
{
if(x.left == null) return x.right;
x.left = deleteMin(x.left);
return x;
}
public void delete(Key key)
{root = delete(root,key);}
private Node delete(Node x,Key key)
{
if(x==null) return null;
int cmp = key.compareTo(x.key);
if (cmp<0) x.left = delete(x.left,key);
else if(cmp>0) x.left = delete(x.right,key);
else
{
if(x.right == null) return x.left;
if(x.left == null) return x.right;
}
return x;
}
}