数据结构--二叉排序树

目录

二叉排序树的定义

二叉排序树的查找

二叉排序树的插入

二叉排序树的构造

二叉排序树的删除

查找效率分析

回顾


二叉排序树的定义

二叉排序树的查找

查找成功的情况

查找失败的情况

二叉排序树的插入

注意

(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)

回顾

相关推荐
专注仿真6 小时前
ACM算法
算法·深度优先
差不多的周周7 小时前
《骨架上下文:基于零镜头骨架的动作识别的骨架侧上下文提示学习》论文核心部分详解
学习
新中地GIS开发老师7 小时前
本科人文地理与城乡规划,考研专业和院校有什么推荐?
考研
code斗7 小时前
Java数据结构:堆详解
java·开发语言·数据结构
Century_Dragon8 小时前
从挂图到VR:汽修专业的一堂新能源原理课可以怎么上~
学习
知识分享小能手8 小时前
C++ 学习教程,从入门到精通,C++对象和类 — 详细知识点总结(10)
开发语言·c++·学习
顺顺 尼8 小时前
linux 进程信号(上)
linux·c++·算法
罗西的思考8 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(5)--- GRPO
人工智能·算法·机器学习
richard_yuu9 小时前
动态规划:强化学习的「数学基础」,从 MDP 到值迭代
深度学习·神经网络·算法·yolo·机器学习·动态规划
New农民工9 小时前
倒立摆训练秘籍:理解训练参数
学习