二分搜索树 03 更优化的添加

BST中的接口 - void add(E e)

  • 完全将问题抛给递归算法,即将问题转化为一个递归问题;
  • 直接将问题丢给一个更厉害的递归方法,从而省掉判断 BST 中 root == null 的情况;
  • 先拎着 BSTroot,把整棵树丢进递归方法中,返回的新树再让 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辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 如需转载, 请咨询作者, 并且注明出处.有任何问题, 可以关注我的微博: coderwhy, 或者添加我的微信: ...
    coderwhy阅读 9,158评论 12 36
  • 红黑树是平衡二叉查找树的一种。为了深入理解红黑树,我们需要从二叉查找树开始讲起。 BST 二叉查找树(Binary...
    kanehe阅读 1,453评论 0 8
  • 迈肯思的经典智能温控机箱 迈肯思C445L2这款19英寸机架式机箱前面板采用铝拉丝面板和铝面板的结合,自带LCD机...
    Sheeta_zhong阅读 455评论 0 0
  • 3 第三天,死亡与仙缘再次来敲门。 刘林死在茅厕边,吴斩成为无俦。他在齐独眼房间里,让火符飘在空中,四射的热浪点燃...
    金钟有罩阅读 289评论 0 0

友情链接更多精彩内容