- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二叉排序树的平均查找长度: 45 24 12 37 53 93 (45, 24, 53, 12, 37, 93) 53 45 12 24 37 93 折半查找 判定树 (12, 24, 37, 45, 53, 93) 37 12 45 24 53 93 二叉排序树 45 24 12 37 53 93 最坏情况:插入的 n 个元素从一开始就有序, —— 变成单支树的形态! 此时树的深度为 n; ASL = (n + 1) / 2 查找效率与顺序查找情况相同。 含有 n 个结点的二叉排序树的平均查找长度和树的形态有关 最好情况: ASL=log 2(n + 1) – 1; 树的深度为:?log 2n ? + 1; 与折半查找中的判定树相同。 (形态比较均衡)。 45 24 12 37 53 93 45 24 12 37 53 93 问题:如何提高形态不均衡的二叉排序树的查找效率? 平衡二叉树 解决办法:做“平衡化”处理,即尽量让二叉树的形状均衡! 4、平衡二叉树 平衡二叉树又称 AVL 树,它是具有如下性质的二叉树: 为了方便起见,给每个结点附加一个数字 = 该结点左子树与 右子树的深度差。这个数字称为结点的平衡因子。这样,可以得 到 AVL 树的其它性质(可以证明): 即: |左子树深度-右子树深度| ≤ 1 左、右子树是平衡二叉树; 所有结点的左、右子树深度之差的绝对值≤ 1。 任一结点的平衡因子只能取:-1、0 或 1;如果树中任意一个 结点的平衡因子的绝对值大于 1,则这棵二叉树就失去平衡。 对于一棵有 n 个结点的 AVL 树,其深度和 log n 同数量级, ASL 也和 log n 同数量级。 非平衡二叉树 例:判断下列二叉树是否 AVL 树? 1 -1 0 0 -1 -1 0 平衡二叉树 0 0 1 2 -1 0 如果在一棵 AVL 树中插入一个新结点后造成失衡,则 必须重新调整树的结构,使之恢复平衡。 我们称此调整平衡的过程为平衡旋转。 平衡旋转的类别 LL 平衡旋转 RR 平衡旋转 LR 平衡旋转 RL 平衡旋转 若在 C 的左子树的左子树上插入 结点,使 C 的平衡因子从 1 增加 至 2, 需要进行一次顺时针旋转。 (以 B 为旋转轴) A 若在 A 的右子树的右子树上插入 结点,使 A 的平衡因子从 -1 改变 为 -2,需要进行一次逆时针旋转。 (以 B 为旋转轴) 2) RR 平衡旋转: C 1) LL 平衡旋转: C B C A B A 若在 A 的右子树的左子树上插入 结点,使 A 的平衡因子从 -1 改变 为 -2,需要先进行顺时针旋转,再逆时针旋转。 (以插入的结点 C 为旋转轴) 4) RL 平衡旋转: C 若在 C 的左子树的右子树上插入 结点,使 C 的平衡因子从 1 增加 至 2, 需要先进行逆时针旋转, 再顺时针旋转。 (以插入的结点 B 为旋转轴) B 3) LR 平衡旋转: 调整必须保证二叉排序树的特性不变 C A A B C C A B A B C A B B C A 0 13 0 37 0 24 例:请将下面序列构成一棵平衡二叉排序树: (13, 24, 37, 90, 53) 0 13 0 37 -1 13 0 24 -1 24 -2 13 0 90 -1 24 -1 37 0 53 1 90 -2 37 需要 RR 平衡 旋转 (绕 24 逆 转,24 为根) 需要 RL 平衡 旋转(绕 53 先顺后逆) -2 24 0 37 0 90 0 53 0 53 0 37 0 90 -1 24 ▲ 9.3 哈希表(散列表) 9.3.1 什么是哈希表 以上讨论的表示查找表的各种结构的共同特点:记录在表中 的位置和它的关键字之间不存在一个确定的关系。 1 2 3 4 5 6 7 8 9 10 11 5 13 19 21 37 56 64 75 80 88 9
原创力文档


文档评论(0)