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

向二分搜索树中添加元素

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

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

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

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

总结:

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

代码演示

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

public class BST> {

    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);
    }
}

源码下载

[dm href=’https://www.jikewenku.com/product/1487.html’]下载地址[/dm]

导航目录

[dm href=’https://www.jikewenku.com/geeknote/2241.html’]查看导航[/dm]

本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
极客文库 » 数据结构笔记总结(5.3)向二分搜索树中添加元素

Leave a Reply

欢迎加入「极客文库」,成为原创作者从这里开始!

立即加入 了解更多