- 1、本文档共52页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
chapter3.2_part3二叉搜索树_AVL树解读
* * * * * * * AVL树结构调整 左单旋转 右单旋转 先左后右旋转 先右后左旋转 左单旋转 A C h h h B D E A C h h+1 h B D E A C h h+1 h B D E 初始状态 插入后失衡 调整后平衡 右单旋转 A h h h D E B C A h+1 h h D E B C A B h h+1 D E h C 初始状态 插入后失衡 调整后平衡 先左后右旋转 A h h h D F B E h-1 G C A h h-1 h D F B E h-1 G C 初始状态 插入失衡,最近的失衡点为A A h h h D F B E h-1 G C 围绕A的做孩子B左旋 A h h h D F B E h-1 G C 围绕A右旋 先右后左旋转 A h h-1 h E F C D h G B A h h-1 h E F C D h-1 G B 初始状态 A h h-1 h E F C D h G B 插入失衡,最近的失衡点为A 围绕A的右孩子C右旋 B A h h-1 h E F C D h G 围绕A左旋 旋转运算的实质 新树保持了原来的中序遍历顺序 旋转处理中仅需改变少数指针 而且新的子树高度为h+2,保持插入前子树的高度不变 原来二叉树在a结点上面的其余部分(若还有的话)总是保持平衡的 AVL树的插入 向一棵高度平衡的AVL树中插入一个新结点时,如果树中某个结点的平衡因子的绝对值|balance|1,则出现了不平衡,需要做平衡化处理。 课堂练习 假定一组数据为(40,28,16,56,50,32,30,63),按次序插入每个数据生成一棵高度平衡的二叉树。给出插入各结点后的树的形状。 */98 例,输入关键码序列为 { 16, 3, 7, 11, 9, 26, 18, 14, 15 }, 插入和调整过程如下。 16 0 16 3 -1 0 16 3 7 0 1 -2 左右双旋 7 3 16 0 0 0 7 3 11 0 -1 1 16 右单旋 3 7 16 9 0 0 0 1 11 3 7 11 26 9 16 0 1 1 2 7 3 16 11 9 0 -1 -2 2 */98 右左双旋 左单旋 18 16 0 0 0 7 3 26 11 9 0 0 3 16 0 9 1 7 11 26 2 7 3 9 0 18 26 11 -1 16 1 18 3 -1 -1 7 16 14 0 26 9 1 11 */98 左右双旋 15 2 3 18 16 -2 0 7 14 9 11 26 1 -2 18 7 3 0 0 11 -1 16 15 0 1 26 14 9 从空树开始的建树过程 平衡树(AVL树)的删除操作 具体情况分析:以在左子树进行删除为例。 1、结点平衡度原为 0。高度不变,调整结束。 A h 调整 h h-1 0 A h h h-1 +1 平衡树(AVL树)的删除操作 具体情况分析:以在左子树进行删除为例。 2、结点平衡度原为 -1。高度少1,继续调整. A h-1 调整 h h-1 -1 0 A h-1 h h-1 平衡树(AVL树)的删除操作 具体情况分析:以在左子树进行删除为例。 3、结点平衡度原为+1。有三种情况。 A、右兄弟平衡因子为0。 A 调整 h-1 h-2 +1 +2 B h-1 h-1 0 B h-1 h-2 -1 A h-1 h-1 +1 平衡树(AVL树)的删除操作 具体情况分析:以在左子树进行删除为例。 3、结点平衡度原为+1。有三种情况。 B、右兄弟平衡因子为+1 A 调整 h-1 h-2 +1 +2 B h-1 h-2 +1 B h-1 h-2 0 A h-2 h-1 0 平衡树(AVL树)的删除操作 具体情况分析:以在左子树进行删除为例。 3、结点平衡度原为+1。有三种情况。 C、右兄弟平衡因子为-1 A 调整 h-1 h-2 +1 +2 B h-2 -1 h-3 C +1 h-2 C h-2 0 B h-2 h-3 A -1 h-2 0 */98 */98 AVL树的高度 具有n个结点的AVL树的高度一定是O(log n) n个结点的AVL树的最大高度不超过 klog2 n 这里k是一个小的常数 最接近于不平衡的AVL树 构造一系列AVL树T1,T2,T3,…。 */98 T1 T3 T2 T4 Ti-1 Ti-2 Ti Ti的高度是i 或者说,Ti是具有同样的结点数目的所有AVL树中 最接近不平衡状态的,删除一个结点都会不平衡 T1 每棵具有高度i的其它AVL树都比Ti的结点个数多 高度的证明(推理) 可看出有下列关系成立: t(1) = 2
文档评论(0)