0    课程地址

https://coding.imooc.com/lesson/207.html#mid=13456

 

1    重点关注

1.1    二分搜索树添加元素代码实现

见3.1

 

2    课程内容


 

3    Coding

3.1    二分搜索树添加元素代码

  • 关键代码
//2     循环添加元素
    public void add(E e){
        //2.1   考虑特殊情况,如果是第一次调用,root为null
        if(root==null){
            root = new Node(e);
            size++;
        }else{
            //2.2   添加递归方法
            add(e,root);
        }
    }

    //3     递归,添加元素
    public void add(E e,Node root){
        //3.1   终止条件
        //3.1.1 要插入的元素和二叉树原有节点相同
        if(e.equals(root.e)){
            return;
        }

        //3.1.2 最终插入左孩子
        if(e.compareTo(root.e)<0 && root.left==null){
            root.left = new Node(e);
            size++;
            return;
        }

        //3.1.2 最终插入右孩子
        if(e.compareTo(root.e)>0 && root.right == null){
            root.right = new Node(e);
            size++;
            return;
        }

        //3.2   递归
        //3.2.1 递归左孩子
        if(e.compareTo(root.e)<0){
            add(e,root.left);
        }

        //3.2.2 递归右孩子
        if(e.compareTo(root.e)>0){
            add(e,root.right);
        }

    }

 

  • 全量代码
package com.company;

public class BST<E extends Comparable> {

    //1     内部类
    private class Node{
        //二叉树特有属性
        private Node left,right;
        private E e;
        private Node(E e){
            this.e = e;
            this.left = null;
            this.right = null;
        }
    }

    private int size;
    private Node root;

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

    /**
     * 定义基本方法 getSize
     * @author weidoudou
     * @date 2022/11/3 12:57
     * @return int
     **/
    public int getSize(){
        return size;
    }

    /**
     *查询是否为空
     * @author weidoudou
     * @date 2022/11/3 12:58
     * @return boolean
     **/
    public boolean isEmpty(){
        return size == 0;
    }

    //2     循环添加元素
    public void add(E e){
        //2.1   考虑特殊情况,如果是第一次调用,root为null
        if(root==null){
            root = new Node(e);
            size++;
        }else{
            //2.2   添加递归方法
            add(e,root);
        }
    }

    //3     递归,添加元素
    public void add(E e,Node root){
        //3.1   终止条件
        //3.1.1 要插入的元素和二叉树原有节点相同
        if(e.equals(root.e)){
            return;
        }

        //3.1.2 最终插入左孩子
        if(e.compareTo(root.e)<0 && root.left==null){
            root.left = new Node(e);
            size++;
            return;
        }

        //3.1.2 最终插入右孩子
        if(e.compareTo(root.e)>0 && root.right == null){
            root.right = new Node(e);
            size++;
            return;
        }

        //3.2   递归
        //3.2.1 递归左孩子
        if(e.compareTo(root.e)<0){
            add(e,root.left);
        }

        //3.2.2 递归右孩子
        if(e.compareTo(root.e)>0){
            add(e,root.right);
        }

    }


}

 

posted on 2022-11-03 17:37  菜鸟乙  阅读(24)  评论(0编辑  收藏  举报