当前位置: 首页 > news >正文

数据结构--二叉排序树

目录

二叉排序树的定义

二叉排序树的查找

二叉排序树的插入

二叉排序树的构造

二叉排序树的删除

查找效率分析

回顾


二叉排序树的定义

二叉排序树的查找

查找成功的情况

查找失败的情况

 

二叉排序树的插入

 

注意

(1)二叉排序树不允许出现重复的值,不能插入相同的结点,所以插入的元素如果是和之前的关键字相同,则插入失败。

(2)递归实现的最坏空间复杂度是O(h)

(3)新插入的结点一定是叶子结点

二叉排序树的构造

 

 二叉排序树的删除

(1)

 

(2)

 

 比如删除13结点和60结点后的效果

 

(3)

 

方法1:

找右子树的直接后继(通过中序排列)

 要删除50,用50的右子树,将右子树中序排列(60.61.63.65.66.70)最先访问的结点60,替代要删除的结点50的位置,

删除结果为

方法2:

找左子树(的直接前驱)中最大的值去替代要删除的结点,要删除的结点50的左子树最大的值30,所以用30代替50

 

删除后的结果如下:

查找效率分析

对比1次就是一层,2次就是第二层,依次类推......

比如:对于70的查找长度就是3次(三层)

对比次数肯定不会超过树的高度,

若树高h,找到最下层的一个结点需要对比h次
 

 

 查找最好情况就是像平衡二叉树那样

(平衡二叉树:树上任一个结点左子树和右子树的深度之差不超过1)

回顾

 

http://www.lryc.cn/news/168675.html

相关文章:

  • Python | 根据子列表中的第二个元素对列表进行排序
  • qsort函数详细讲解以及利用冒泡排序模拟实现qsort函数
  • C++QT day6
  • List与ArrayList
  • 【C++】特殊类的设计
  • 机器学习:PCA(Principal Component Analysis主成分)降维
  • linux服务器slab缓存回收方案设计
  • Apache Spark 的基本概念
  • 通讯协议介绍CoAP 协议解析
  • React 开发一个移动端项目(2)
  • 51单片机 点阵矩阵 坤坤代码
  • Android13-图片视频选择器
  • 【问题处理】GIT合并解决冲突后,导致其他人代码遗失的排查
  • H264视频压缩格式
  • 动态的中秋爱心演示送女友用python生成爱心软件文末附c++语言写法
  • macOS - 使用VLC
  • java微服务项目整合skywalking链路追踪框架
  • pandas 笔记: interpolate
  • 应用程序接口(API)安全的入门指南
  • JavaWeb概念视频笔记
  • 网络请求【小程序】
  • python 调用adb shell
  • vue3 使用 vite 构建的项目打包后无法访问
  • C语言指针详解(4)———找工作必看指针笔试题汇总
  • 03MyBatis-Plus中的常用注解
  • Android 修复在 Settings 首页,按键盘方向键逐个单选
  • SpringMvc第六战-【SpringMvcJSON返回异常处理机制】
  • idea-Tabnine
  • 联通面试题
  • [计组03]进程详解2