数据结构从排序树到B-树,旋转法解决插入删除,平均搜索长度

声明:部分图片来自南京某大学数据结构课的ppt,未经允许,不得转载

二叉搜索树

又叫二叉排序树

首先是二叉树

​ 定义:所有结点的关键字各不相同,(1)若左子树不空,则左子树上的所有结点的关键字值均小于根结点的 关键字值 (2)若右子树不空,则右子树上所有结点的关键字值均大于根结点关键字值 (3)左、右子树也分别是二叉搜索树

​ 性质:若以中序遍历一颗二叉搜索树,将得到一个以关键字值递增排列的有序序列

​ 二叉搜索树定义时按照左中右从小到大定义,中序遍历也是左中右。

​ 推论:已知一颗二叉搜索树的先序遍历序列,就可以画出这颗二叉树。因为二叉搜索树的中序遍历就是二叉树以关键字值递增排列的有序序列

​ 插入步骤:

1、先从根结点向下搜索x,搜索失败的位置作为x的插入位置,如果在树中找到了x,则返回

2、生成新结点

3、插入新结点

题型:从空树开始插入

删除步骤:

1、叶子节点:直接删除

2、一个孩子为空,另一个孩子非空:待删除结点的上一级,即双亲结点指向待删除结点的下一级,即非空的孩子,释放待删除结点

3、删除有两个孩子的结点: 在待删除结点的后代中选择一个代替者覆盖待删除结点,代替者要满足:1、大于待删除结点左子树的结点值,小于待删除结点右子树结点值 2、容易删除。删除重复的代替者

替代者的选择方法:在二叉搜索树的中序遍历序列上,找到待删除结点在序列中的前/后一项作为替代者

二叉搜索树的时间复杂度分析

最好情况和一般情况O(logn)最坏情况:单支树,O(n)

二叉判定树

对半搜索引入,是特殊的二叉搜索树

二叉搜索树是由二分搜索引入

二叉平衡树

AVL树

首先是满足排序性,即是一个二叉搜索树

并且(1)其根的左右子树的高度之差的绝对值不超过1

​ (2)其根的左右子树都是二叉平衡树

补充定义:二叉搜索树和二叉平衡树均可是空二叉树

插入

先按普通二叉树的插入方法保持排序性,再看是否满足平衡性,如果不满足,进行调整

是否满足:检查新结点的祖先结点(新结点到根结点路径路径上的结点)是否有平衡因子绝对值大于1的结点产生

不满足:调整最小的不平衡子树

如何调整?

最后一个平衡因子的绝对值大于1到新结点为leftleft型,单旋转方法,新的根结点为最后一个平衡因子的绝对值大于1的下一个

新结点为leftright型,双旋转方法,新的根结点在最后一个平衡因子的下下个(先左后右,先右后左)

重点:找根结点
在这里插入图片描述

例题

在这里插入图片描述
下面是答案
在这里插入图片描述

在这里插入图片描述

关键步骤(易错点)

在这里插入图片描述

在这里插入图片描述

c到d的双旋转

删除:

先按照二叉搜索树的删除方法,再按照上面的方法进行调整。

在这里插入图片描述
重点注意步骤c到步骤d的双旋转

平均搜索长度

在这里插入图片描述
在这里插入图片描述

注意:1、失败结点里面数字的构造规则(人为定义的)

2、0搜索失败判断3次,但有两个相同的结点,与8那边做区分。因为0那边有两个搜索失败的区间长度

总的所需要比较的次数/成功结点or失败结点=平均搜索长度,即搜索一个结点所需要次数的期望值

m叉搜索树

m 任意节点最多子树的数量,即任意节点最多关键字的数量加1。下图为7叉搜索树

在这里插入图片描述

空结点不是叶子结点

B-树

B-树的阶数不唯一

在这里插入图片描述

关键字数目不小于m/2向上取整

元素总数,即关键字总数,等于失败结点总数-1

一个结点拥有的子树数量称为该结点的度

微观:B-树所有结点的总度数=失败结点的总度数+非失败结点的总度数=非失败结点的总度数

每个非失败结点的度数=该结点所包含的关键字个数+1

非失败结点的总度数=元素总数N+非失败结点总数t

宏观:除根结点外,每个结点贡献一个度(每个结点连一条线)

B-树所有结点的总度数=失败结点总数s+非失败结点总数t-1

考虑结点最少的情况

第一层为根结点,至少有两个孩子

第二层有至少有2个结点,

搜索:

类似于二叉树

结点中关键字搜索,就是一个有序表中的搜索

插入:

先插入m-1个元素,再进行调整,在边插入边调整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值