博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
平衡二叉树
阅读量:6615 次
发布时间:2019-06-24

本文共 701 字,大约阅读时间需要 2 分钟。

前面我写了一篇,最后我们提到提高二叉排序树的查找效率是让二叉树的形状均衡,所以就引入了平衡二叉树。

特点:

  • 一种特殊类型的二叉排序树

  • 所有结点的左、右子树深度之差的绝对值≤1

  • 左右子树是平衡二叉树;

平衡因子:该结点左子树和右子数的高度差

任意一个结点的平衡因子只能取:-1、0或1;如果树中任意一个结点的平衡因子的绝对值大于1,则这棵二叉树就失去平衡,不再是AVL树;

对于一棵有n个结点的AVL树,其高度保持在O(log2n)数量级,ASL也保持在O(log2n)量级。

这里写图片描述

如果在一棵AVL树中插入一个新结点,就有可能造成失衡,此时必须重新调整树的结构,使之恢复平衡。我们称调整平衡过程为平衡旋转

调整方法:找到最小不平衡子树,可将重新平衡的范围局限于这棵子树,在保持二叉排序树特性的前提下,调整最小不平衡子树中各个结点之间的链接关系,进行相应的旋转,使之成为新的平衡子树。

最小不平衡子树:离插入结点最近且平衡因子绝对值超过1的祖先结点,以该结点为根的子树称为最小不平衡子树。

假设最小不平衡子树的根结点为A,则失去平衡后进行调整的规律可归纳为以下四种情况。

  • LL平衡旋转

  • RR平衡旋转

  • LR平衡旋转

  • RL平衡旋转

1)LL平衡旋转:

若在A的左子树的左子树插入结点,使A的平衡因子从1增加到2,需要进行一次向右顺时针旋转(以B为旋转轴)

这里写图片描述

这里写图片描述

2)RR平衡旋转:

若在A的右子树上插入结点,使A的平衡因子从-1

增加至-2,需要进行一次逆时针旋转(以B为旋转轴)

这里写图片描述

这里写图片描述

3)LR平衡旋转:

若在A的左子树的右子树上插入结点,使A的平衡因子从1增加到2,需要先进行逆时针旋转,再顺时针旋转。(以插入的结点

你可能感兴趣的文章
关于GitHub迁移到K8S的最佳实践,你最看重哪方面?
查看>>
openstack核心路由和扩展路由及路由对应的api函数调用流程分析
查看>>
java操作mongodb数据库
查看>>
自己动手写一个查询cet成绩的API
查看>>
http:与https:到底有哪些区别?
查看>>
细节决定成败----Android应用程序的优化(一)
查看>>
mac 下 gem安装 compass 遇到 '-multiply_defineds'
查看>>
怎样在MyEclipse中恢复误删的java文件方法
查看>>
redis-spring
查看>>
索引优缺点
查看>>
golang 组合class 输出
查看>>
【ZZ】python with...as...用法
查看>>
精美的国外扁平化网页设计作品
查看>>
Java中断机制
查看>>
windows下安装composer方法
查看>>
如何修改java.lang.OutOfMemoryError?
查看>>
机器学习--kNN算法
查看>>
Spark Streaming源码解读之Job动态生成和深度思考
查看>>
python---创建字典的方式
查看>>
【转】分布式数据流的轻量级异步快照
查看>>