BST中的接口 - void add(E e)
- 完全将问题抛给递归算法,即将问题转化为一个递归问题;
- 直接将问题丢给一个更厉害的递归方法,从而省掉判断 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;
}
特别注意
- 新节点和整棵树的连接是通过将添加新节点后的新树的根返回到外层实现的;
- 在 BST 中添加元素,新添加的节点,只会成为 BST 的叶子节点;
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。