数据结构与算法-第七章 树表的查找

树表的查找

当表插入或删除操作频繁时,为维护表的有序性,需要移动表中很多记录
需要改用动态查找表------几种特殊的树

动态查找表:表结构在查找过程中动态生成
对于给定值key,若表中存在,则成功返回,否则,插入关键字等于key的记录
几种特殊的树:
	二叉排序树
	平衡二叉树
	红黑树
	b-树
	b+树
	键树

(一). 二叉排序树

二叉排序树又称二叉搜索树,二叉查找树

二叉排序树或是空树,或是满足如下性质的二叉树:
	1. 若其左子树非空,则左子树上所有结点的均小于根结点的值;
	2. 若其右子树非空,则右子树上所有结点的值均大于等于根结点的值;
	3. 其左右子树本身又各是一棵二叉排序树;
若中序遍历非空的二叉排序树,会得到一个按关键字排列的递增有序的序列
二叉排序树的操作------查找
算法思想:(递归查找)
设给定查找的值key,从指定的二叉排序树的根结点开始查找:
	1. 若二叉排序树为空,则查找失败,返回空指针;
	2. 若key等于根结点,则成功;
		否则:
			若小于根结点,则查找其左子树;
			若大于根结点,则查找其右子树;
			在左右子树上的操作类似;
二叉排序树的查找分析
二叉排序树上查找某关键字等于给定值的结点过程,其实就是走了一条从根到该结点的路径;
二叉排序树在查找时的次数,取决于查找的关键字在树中的层次;
最坏情况: 二叉排序树形态不均衡: 二叉排序树的深度 = 关键字个数

对于含有n个结点的二叉排序树的平均查找长度和树的形态有关
最好情况: 二叉排序树形态比较均衡,与折半查找中的判定树相同O(logn)
二叉排序树的操作------插入
若二叉排序树为空,则插入结点作为根结点插入到空树中
否则,继续在其左右子树上查找:
	树中已有,不再插入;
	树中没有:
		查找直至某个叶子结点的左子树或右子树为空为止,则插入结点应为该叶子结点的左孩子或右孩子
	插入的元素一定在叶子结点上
二叉排序树的操作------生成
	从空树出发,经过一系列的查找和插入操作之后,可生成一棵二叉排序树
	
	一个无序序列可通过构造二叉排序树而变成一个有序序列.构造的过程就是对无序序列进行排序的过程.
	
	插入的结点均为叶子结点,故无需移动其他结点.相当于在有序序列上插入记录而无需移动其他记录.
二叉排序树的操作------删除
从二叉排序树中删除一个结点,不能把以该结点为根的子树都删去,只能删掉该结点,并且:还应保证删除后得到的二叉排序树仍然满足二叉排序树的性质不变.

由于中序遍历二叉排序树可以得到一个递增有序的序列.那么,在二叉排序树中删去一个结点相当于删去有序序列中的一个结点.
	1. 将因删除结点而断开的二叉链表重新链接起来
	2. 反之重新链接后树的高度增加

删除结点的情况分三种:
	1. 被删除的结点是叶子结点:直接删去该结点
	2. 被删除的结点只有左子树或者只有右子树,用其左子树或者右子树替换它(结点替换).其双亲结点的相应指针域的值改为"指向被删除结点的左子树或右子树"
	3. 被删除的结点既有左子树,也有右子树
		· 以其中序前驱的值将其替换,然后再删除该前驱.(前驱是左子树中最大的结点)
		· 也可以用其后继替换之,然后再删除该后继(后继是右子树中最小的结点)
做"平衡化"处理,即尽量让二叉树的形态均衡!------平衡二叉树

(二). 平衡二叉树

平衡二叉树
	又称AVL树
	一棵平衡二叉树或者是空树,或者是具有下列性质的二叉排序树:
		左子树与右子树的高度之差的绝对值小于等于1
		左子树和右子树也是平衡二叉排序树
平衡因子
为了方便起见,给每个结点附加一个数字,给出该结点左子树与右子树的高度差.这个数字称为该结点的平衡因子(BF)
	平衡因子 = 结点左子树的高度 - 结点右子树的高度

根据平衡二叉树的定义,平衡因子只能是-1,0,1

对于一棵有n个结点的AVL树,其高度保持在O(logn)数量级,ASL也保持在O(logn)量级
失衡二叉排序树的分析与调整
当我们在一个平衡二叉树上插入一个结点时,有可能导致失衡,即出现平衡因子绝对值大于1的结点,-2,2

如果在一棵AVL树中插入一个新结点后造成失衡,则必须重新调整树的结构,使之恢复平衡;
平衡调整的四种类型:
	LL型
	LR型
	RL型
	RR型
调整共同原则:
	降低高度
	保持二叉排序树的性质
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值