• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

数据结构笔记总结(5.3)向二分搜索树中添加元素

极客笔记 Geekerstar 11个月前 (05-14) 348次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

向二分搜索树中添加元素

首先开始的时候二分搜索树里一个节点都没有,也就是说二分搜索树root是空的。

现在要添加一个新的元素41,这个节点就会成为根节点,如果再添加一个元素比如22,应该添加到哪里呢?

我们从根出发,根据二分搜索树的定义,22比根节点41要小,显然应该添加到41的左子树去,成为41的左孩子,二分搜索树就会变成这个样子。

下面看一个稍微复杂点的例子,比如插入一个60,60比41大,应该放在41的右子树,60比58大,应该放在58的右子树,如下图所示。

总结:

  • 这里实现的二分搜索树不包含重复元素
  • 如果想包含重复元素的话,只需要定义:左子树小于等于节点;或者右子树大于等于节点(注意:之前学习的数组和链表是可以有重复元素的)
  • 二分搜索树添加元素的非递写法和链表很像
  • 二分搜索树方面,递归比非递归实现简单

代码演示

下面来具体编程,看如何使用递归的方法来写二分搜素树添加新元素的算法

public class BST<E extends Comparable<E>> {

    private class Node {
        public E e;
        public Node left, right;

        public Node(E e) {
            this.e = e;
            left = null;
            right = null;
        }
    }

    private Node root;
    private int size;

    public BST(){
        root = null;
        size = 0;
    }

    public int size(){
        return size;
    }

    public boolean isEmpty(){
        return size == 0;
    }

    // 向二分搜索树中添加新的元素e
    public void add(E e){

        if(root == null){
            root = new Node(e);
            size ++;
        }
        else
            add(root, e);
    }

    // 向以node为根的二分搜索树中插入元素e,递归算法
    private void add(Node node, E e){
        if(e.equals(node.e))
            return;
        else if(e.compareTo(node.e) < 0 && node.left == null){
            node.left = new Node(e);
            size ++;
            return;
        }
        else if(e.compareTo(node.e) > 0 && node.right == null){
            node.right = new Node(e);
            size ++;
            return;
        }

        if(e.compareTo(node.e) < 0)
            add(node.left, e);
        else //e.compareTo(node.e) > 0
            add(node.right, e);
    }
}

源码下载

下载地址

导航目录

查看导航
丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:数据结构笔记总结(5.3)向二分搜索树中添加元素
喜欢 (0)
[247507792@qq.com]
分享 (0)
Geekerstar
关于作者:
本站技术支持

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00