- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 查找 3.二叉排序树的插入算法 根据动态查找表的定义,“插入”操作在查找不成功时才进行; 二、二叉平衡树 何谓“二叉平衡树”? 2.查找过程 ※在 B+ 树上,既可以进行缩小范围的查 找,也可以进行顺序查找; ※ 在进行缩小范围的查找时,不管成功 与否,都必须查到叶子结点才能结束; ※若在结点内查找时,给定值≤Ki, 则 应继续在 Ai 所指子树中进行查找。 3.插入和删除的操作 类似于B-树进行,即必要时,也需要进行结点的“分裂”或“归并”。 平衡二叉树(AVL)的插入算法 一、若BBST为空树,则插入一个数据元素 为e的新结点作为BBST的根,树的深度 增1。 二、若e 的关键字和BBST的根结点的关键字 相等,则不进行插入。 三、若e 的关键子小于BBST的根结点的关键 字,且不存在和e相同的关键字,则将e 插入在BBST的左子树上,此时左子树的 深度增1,需进行相应的调整。 BBST的根结点的平衡因子为-1: 则将根结点的平衡因子更改为0,BBST的 深度不变。 BBST的根结点的平衡因子为0: 则将根结点的平衡因子更改为1,树的深 度增为1。 BBST的根结点的平衡因子为1: 1、左子树根结点的平衡因子为1: 2、左子树根结点的平衡因子为-1: 左子树根结点的平衡因子为1: 则需进行单项右旋平衡处理(LL),并 且在右旋处理之后,将根结点和右子树 根结点的平衡因子更改为0,树的深度不变。 左子树跟结点的平衡因子为-1: 则需进行双向旋转平衡处理(LR),并且 在旋转处理后,修改根结点和其左右子树 根结点的平衡因子,树的深度不变。 四、若e的关键字大于BBST的根结点的关键 字,则将e插入在BBST的右子树上。 二叉平衡树的类型定义: Typedef struct BSTNode { ElemType data; Int bf; Struct BSTNode *lchild, *rchild; } BSTNode, *BSTree; 在平衡树上进行查找的过程和二叉排序树相同,因此,查找过程中和给定值进行比较的关键字的个数不超过平衡 树的深度。 平衡树的查找性能分析: 问:含 n 个关键字的二叉平衡树可能达到的最大深度是多少? n = 0 空树 最大深度为 0 n = 1 最大深度为 1 n = 2 最大深度为 2 n = 4 最大深度为 3 n = 7 最大深度为 4 先看几个具体情况: 反过来问,深度为 h 的二叉平衡树中所含结点的最小值 Nh 是多少? h = 0 N0 = 0 h = 1 h = 2 h = 3 一般情况下 N1 = 1 N2 = 2 N3 = 4 Nh = Nh-1 + Nh-2 + 1 利用归纳法可证得 Nh = Fh+2 - 1 因此,在二叉平衡树上进行查找时, 查找过程中和给定值进行比较的关键字的个数和 log(n) 相当。 由此推得,深度为 h 的二叉平衡树中所含结点的最小值 Nh = ?h+2/?5 - 1。 反之,含有 n 个结点的二叉平衡树能达到的最大深度 hn = log?(?5 (n+1)) - 2。 练习 如图所示为一棵二叉排序树.完成: 1、写出平衡因子绝对值为2的结点。 2、为何种类型的不平衡树?画出调整好的平 衡二叉树。 E D A B C L J G F I H K N M 三、 B - 树 1.定义 2.查找过程 3.插入操作 4.删除操作 5.查找性能的分析 1.B-树的定义 B-树是一种 平衡 的 多路 查找 树: 在 m 阶的B-树上,每个非终端结点可能含有: n 个关键字 Ki(1≤ i≤n) nm n 个指向记录的指针 Di(1≤i≤n) n+1 个指向子树的指针 Ai(0≤i≤n) 多叉树的特性 非叶结点中的多个关键字均自小至大有序排列,即:K1 K2 … Kn ; Ai-1 所指子树上所有关键字均小于Ki ; Ai 所指子树上所有关键字均大于Ki ; 查找树的特性 平衡树的特性 树中所有叶子结点均不带信息,且在树中的同一层次上; 根结点或为叶子结点,或至少含有两棵子树; 其余所有非叶结点均至少含有?m/2?棵子树,至多含有 m 棵子树; typedef struct BTNode { int keynum; // 结点中关键字个数,结点大小 struct BTNode *parent;
文档评论(0)