BST中的接口 - 完全将问题抛给递归算法
- 直接将问题丢给一个更厉害的递归方法,从而省掉判断BST中root == null的情况;
- 先拎着BST中root,把整棵树丢进递归方法中,返回的新树再让root接着;
// 向二分搜索树中添加新的元素e
public void add(E e){
root = add(root, e);
}
更厉害的递归方法 - Node add(Node node, E e)
- 向以node为根的二分搜索树中插入元素e,并返回插入新节点后二分搜索树的根;
- 不能再缩小的基本问题是:向null中插入新的节点;
- 规模更小的同一个问题是:将元素e插入node的左子树或右子树;
// 向以node为根的二分搜索树中插入元素e,递归算法
// 返回插入新节点后二分搜索树的根
private Node add(Node node, E e){
if(node == null){
size ++;
return new Node(e);
}
if(e.compareTo(node.e) < 0)
node.left = add(node.left, e);
else if(e.compareTo(node.e) > 0)
node.right = add(node.right, e);
return node;
}