搞懂数据结构-二叉搜索树

本文探讨了在动态整数集合中使用二叉搜索树进行搜索的优势,以及其相较于无序动态数组和有序动态数组的性能优势。二叉搜索树的特性包括:节点值大于左子树所有节点值,小于右子树所有节点值。文章还讨论了如何设计和实现二叉搜索树,包括比较、添加、获取和删除元素的操作。
摘要由CSDN通过智能技术生成

搞懂数据结构-二叉搜索树

1.背景

如果在n个动态的整数中搜索某个整数

  • 利用无序动态数组存放整数,搜索的平均复杂度是O(n)
  • 利用有序动态数组存放整数,可以使用二分法,最坏时间复杂度是O(logn),但是维护有序数组,添加和删除的时间复杂度是O(n)

使用二叉搜索树可以是添加,删除和搜索的最坏时间复杂度优化到O(logn)

2.二叉搜索树的性质

在这里插入图片描述

  • 任意一个节点的值都大于其左子树所有节点的值
  • 任意一个节点的值都小于其右子树所有节点的值
  • 它的左右子树也是一颗二叉搜索树

二叉搜索树存储的元素必须具备可比较性

  • 比如int等
  • 如果是自定义类型,需要指定比较的方式
  • 不允许为null

3.接口设计

int size() // 元素的数量
boolean isEmpty() // 是否为空
void clear() // 清空所有元素
void add (E element) // 添加元素
void remove (E element) // 删除元素
boolean contains (E element) // 是否包含某元素

4.实现二叉搜索树

4.1比较

这里的设计思路很好,多理解

二叉搜索树要求元素必须具有比较性

第一种方法实现比较

//第一种方法,写一个比较接口,传入的元素必须遵守这个接口
//接口
public interface Comparable<E> {
   
    int compareTo(E e);
}
//传入的元素必须遵守这个接口,在里面重写比较的方法
public class BinarySearchTree<E extends Comparable> {
   
    
}

但是上面的问题把一个类型的比较方式给写死了,例如重写的person的age比较,但是如果进行两次比较一次用age,一次不用age,这样就存在局限性。

优化比较

步骤:

  • 判断是否传比较器
  • 如果不传比较器则强制使用第一种方法
//定义各一个比较器接口
public interface Comparator<E> {
   
    int compareTo(E e1, E e2);
}
//构造方法,可以定义传比较器和不传比较器
public class BinarySearchTree<E> {
   
    //比较器
    private Comparator comparator;
    //不传比较器
    public BinarySearchTree() {
   
        this(null);
    }
    //传入比较器
    public 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据结构 试卷1 1 数据结构 试卷2 3 数据结构 试卷3 5 数据结构 试卷4 7 数据结构 试卷5 9 数据结构 试卷6 10 数据结构 试卷7 12 数据结构 试卷8 14 数据结构 试卷9 16 数据结构 试卷10 18 数据结构 试卷11 20 数据结构 试卷12 22 数据结构 试卷13及答案 24 数据结构 试卷14 28 数据结构试卷14答案 29 数据结构试卷15 32 数据结构试卷15答案 34 数据结构试卷16 39 数据结构试卷16参考答案 42 数据结构试题17 43 数据结构试题18 44 数据结构试题18答案 45 数据结构试卷19 48 数据结构试卷19答案 50 数据结构试卷20 51 数据结构试卷20参考答案 53 数据结构试卷21 55 数据结构试卷21参考答案 57 数据结构试卷22 58 数据结构试卷22答案 60 数据结构试卷23 61 数据结构试卷23参考答案 63 数据结构试卷24 65 数据结构试卷24答案 67 数据结构试卷25 68 数据结构试卷25答案 70 数据结构试卷26 71 数据结构试卷26答案 72 数据结构试卷27 73 数据结构试卷27答案 74 数据结构练习题1 76 数据结构练习题1参考答案 78 数据结构练习题2 81 数据结构练习题2参考答案 84 数据结构练习题3 86 数据结构练习题3参考答案 89 数据结构练习题4 92 数据结构练习题4参考答案 95 数据结构练习题5 97 数据结构练习题5参考答案 101 数据结构练习题6 105 数据结构练习题7 114 数据结构练习题8 118 数据结构练习题9 120 数据结构模拟试题10 123 数据结构模拟试题10参考答案 128 数据结构模拟试题11 131 数据结构模拟试题11解答 132 数据结构模拟题12 134 数据结构模拟题12解答及评分标准 136
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值