- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 8.3.4 二叉查找树删除 设P为需要删除结点,Pp为P的父结点,Pc为P的左或右子结点。 1、P为叶结点 直接将Pp指向P的域置空即可。 * 8.3.4 二叉查找树删除2 2、P只有一棵非空子树 直接将Pp指向P的域指向P的非空子树。 * 8.3.4 二叉查找树删除3 3、P具有两棵非空子树 (1)中序序列法 基于中序前驱删除: * 8.3.4 二叉查找树删除3 3、P具有两棵非空子树 (1)中序序列法2 基于中序后继删除: * 8.3.4 二叉查找树删除3 3、P具有两棵非空子树2 (2)子树根结点取代法 若用P的左子树的根结点PL去取代需删结点P,那么需删结点P的右子树成为新根结点PL的右子树。此时PL的左子树(如果有的话)保持不变,而PL右子树应被调整为P中序后继Pm1的左子树。 * 8.3.5 平衡二叉树 二叉查找树的ASL与形态有关,最好能平衡,则 ASL=O(log2n)。 平衡因子: 左、右子树深度之差(hl-hr) AVL:二叉查找树上所有结点平衡因子 |hl-hr|≤1 * 8.3.5 平衡二叉树2 平衡二叉树的调整: 在生成二叉查找树的过程中,需修改祖先结点的平衡因子,如遇第一个平衡被破坏的祖先即开始调整,使第一个被破坏的祖先|hl-hr|≤1,即可保持平衡,称为局部调整。 调整的四种类型(P为新结点,A为被破坏平衡的祖先): 1、LL型:P插入在A的左子结点B的左子树BL上。 2、LR型:P插入在A的左子结点B的右子树BR上。 3、RR型:P插入在A的右子结点B的右子树BR上。 4、RL型:P插入在A的右子结点B的左子树BL上。 * 8.3.5 平衡二叉树3 1、LL型调整:(一次顺时针旋转) 将B“提升”为根结点,将A“下降”为B的右子结点,将B的右子树BR转换为A的左子树,即顺时针旋转。 * 8.3.5 平衡二叉树4 2、 LR型调整:(一次逆时针旋转) 先处理B这棵子树,将C“提升”为根结点,B“下降”为C的左子结点,C原来的左子结点成为B的右子结点,即局部逆时针旋转;再处理整棵树,将C“提升”为根结点,将A“下降”为C的右子结点,C原来的右子结点成为A的左子结点,即整体顺时针旋转。 * 8.3.5 平衡二叉树5 3、 RR型调整:(一次逆时针旋转) 将B“提升”为根结点,将A“下降”为B的左子结点,将B左子树BL转换为A的右子树,即逆时针旋转。 * 8.3.5 平衡二叉树6 4、 RL型调整:(先局部顺时针,再整体逆时针旋转) 先处理B这棵子树,将C“提升”为根结点,B“下降”为C的右子结点,C原来的右子结点成为B的左子结点,即局部顺时针旋转;再处理整棵树,将C“提升”为根结点,将A“下降”为C的左子结点,C原来的左子结点成为A的右子结点,即整体逆时针旋转。 * 8.3.5 平衡二叉树7 相应算法可以描述如下: ① 查找P插入位置过程中记录距插入位置最近同时平衡度不等于0的结点A,这是可能的最小不平衡树的根结点。 ② 修改A到插入位置路径上所有点的平衡度,而其他结点平衡度不予改变。 ③ 判断插入P后,A平衡度绝对值是否增加1。在肯定情况下调用最小不平衡树调整算法;否则插入P的过程就此结束。 基于AVL查找的时间复杂度为O(log2n)。 * 练习: 集合{50,20,10,100,120,30,110,60,70,90,80,40},画出为其构造二叉平衡树的过程。 * §8.4 基于散列表查找 散列查找:设需要存储的线性表中数据对象个数为n,开辟一个长度为m(m≥n)的连续内存单元。以数据元素关键码k为自变量,建立一个Hash函数H(k),该Hash函数将关键码映射为内存单元地址(也称为下标)同时将对应数据元素存储在该内存单元当中。 散列表:查找表,表中关键字的位置是由散列函数求得的。 散列函数:以关键字为自变量的函数,函数值为该关键字在表中的地址。 冲突:不同关键字得到的散列函数值一样,即地址一样,产生冲突。 同义词:产生冲突的关键字 * §8.4 基于散列表查找2 散列查找特点: 基于计算找到关键字地址 平均查找长度(ASL)与散列表长度或关键字个数无关。 * 8.4.1 常用散列函数的构造 1、直接定址法 散列函数H(k)定义为 H(k)=k+c。 2、数字分析法 对关键字进行分析,取其中分布均匀的几位构造散列函数。 3、除余法 对关键字进行取模运算,散列函数H (k)为:H (k) =
文档评论(0)