首页 > 其他分享 >数据结构 玩转数据结构 6-5 二分搜索树的查询操作

数据结构 玩转数据结构 6-5 二分搜索树的查询操作

时间:2022-11-04 12:45:37浏览次数:76  
标签:二分 node return Node boolean 玩转 数据结构 root public

0    课程地址

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

 

1    重点关注

1.1    二分搜索树查询代码实现

见3.1


 

2    课程内容


 

3    Coding

3.1    二分搜索树查询元素

  • 关键代码
/**
     * 二分搜索树 是否包含元素e
     * @author weidoudou
     * @date 2022/11/4 9:55
     * @param e 请添加参数描述
     * @return boolean
     **/
    public boolean contains(E e){
        return contains(e,root);
    }

    /**
     * 二分搜索树查询 递归
     * @author weidoudou
     * @date 2022/11/4 9:57
     * @param e 请添加参数描述
     * @param  node 请添加参数描述
     * @return boolean
     **/
    private boolean contains(E e,Node node){
        //终止条件
        if(node == null){
            return false;
        }
        if(e.compareTo(node.e)==0){
            return true;
        }

        //递归条件
        if(e.compareTo(node.e)<0){
            return contains(e,node.left);
        }else{
            return contains(e,node.right);
        }

    }

 

  • 全量代码
package com.company;

public class BST2<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 BST2(){
        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     循环添加元素,把null也看作节点
    public void add(E e){
        root = add(e,root);
    }

    //3     递归,添加元素
    public Node add(E e,Node root){
        //3.1   终止条件
        if(root==null){
            size++;
            return new Node(e);
        }

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

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

        //点睛之笔
        return root;
    }

    /**
     * 二分搜索树 是否包含元素e
     * @author weidoudou
     * @date 2022/11/4 9:55
     * @param e 请添加参数描述
     * @return boolean
     **/
    public boolean contains(E e){
        return contains(e,root);
    }

    /**
     * 二分搜索树查询 递归
     * @author weidoudou
     * @date 2022/11/4 9:57
     * @param e 请添加参数描述
     * @param  node 请添加参数描述
     * @return boolean
     **/
    private boolean contains(E e,Node node){
        //终止条件
        if(node == null){
            return false;
        }
        if(e.compareTo(node.e)==0){
            return true;
        }

        //递归条件
        if(e.compareTo(node.e)<0){
            return contains(e,node.left);
        }else{
            return contains(e,node.right);
        }

    }


}

 

标签:二分,node,return,Node,boolean,玩转,数据结构,root,public
From: https://www.cnblogs.com/1446358788-qq/p/16857383.html

相关文章

  • 半边数据结构与OpenMesh中的处理
    参考:https://blog.csdn.net/jialong_chen/article/details/118497495《Springer.3DMeshProcessingandCharacterAnimation.WithExamplesUsingOpenGL,OpenMeshand......
  • 两道二分
    因为前天做了一道spfa+二分的题目,没有看出来需要用二分,就想着先练一练二分的题目在洛谷题单里面的两道题目,虽然不太难,确实能起到训练二分的作用模版打的更熟了,对二分有了多......
  • 数据结构(一):(顺序表)设计算法删除所有数字字符
    好家伙,写作业 什么是顺序表:顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性......
  • 数据结构专题总结
    打了一天的数据结构,感觉码力上升的很快,而且也学会了许多方法,但总体来说今天大部分的题很多都是看完题解以后才会的,无论怎么想也想不出来,还是要提高一下想题的能力,不要走神,......
  • 数据结构之线性表的顺序表示和实现1
    #defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2typedefintStatus;typedefcharElemType;//一些数据......
  • 数据结构 玩转数据结构 6-4 深入理解递归终止条件
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13456 1重点关注1.1代码草图   1.2二分搜索树添加元素代码简化......
  • 星起航跨境:解决新手小白卖家难题,四个方面教你玩转亚马逊
    大家都知道,现在做跨境电商的利润非常可观,这让很多没有经验的卖家也蠢蠢欲动。跨境电商的平台非常多,优势也各不相同。但是国内卖家大多选择的是亚马逊,亚马逊作为跨境电商头部......
  • 玩转 Gitea | 在 Linux 上安装预编译的 Gitea 程序,配置 systemd 管理服务
    这是一篇介绍手动安装Gitea服务器的用户指南。与之前的容器安装方式相比,对系统资源的要求更低,因此也可以在低功耗的嵌入式Linux设备上配置安装。您可以使用systemd作......
  • 【C语言数据结构】EP1顺序表
    1.什么是顺序表顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为静态表与动......
  • 【数据结构与算法】有向图的拓扑排序
    前言在现实生活中,我们经常会同一时间接到很多任务去完成,但是这些任务的完成是有先后次序的。以我们学习java学科为例,我们需要学习很多知识,但是这些知识在学习的过程中是需要......