数据结构--平衡二叉树
平衡二叉树
回顾:二叉排序树的查找
二叉排序树的不平衡会影响查找效率,所有我们要尽量让二叉树的形态均衡.
AVL树(平衡二叉树)
-
必须是二叉排序树
-
左子树和右子树的高度之差的绝对值小于等于1
-
左子树和右子树也是平衡二叉排序树
平衡因子
该结点左子树与右子树的高度差.
平衡因子=结点左子树的高度-结点右子树的高度
判断平衡二叉树
对于一个右n个结点的AVL树,其高度保持再O(logn)数量级,ASLA也保持在O(logn)量级.
平衡调整办法1
有可能导致失衡,即出现平衡因子大于1的结点
如果在一颗AVLA树中插入一个新结点后造成失衡,则必须重新调整树的结构,让其恢复平衡
平衡调整的四种类型
A:失衡结点 不止一个失衡结点时,为最小失衡子树的结点
B:A结点的孩子,C结点的双亲.
C:插入新节点的子树.
调整原则:
- 降低高度
- 保持二叉排序树性质
LL型
1. B结点带左子树α一起上升
2. A结点成为B的右孩子
3. 原来B结点的右子树β作为A的左子树
LL型例题
RR型调整
1. B结点带右子树β一起上升
2. A结点成为B的左孩子
3. 原来B结点的左子树α作为A的右子树
RR型例子
LR型调整
C是最小的所以要上升
1. C结点穿过A、B结点上升
2. B结点成为C的左孩子,
3. A结点成为C的右孩子
4. 原来C结点的左子树β作为B的右子树;
5. 原来C结点的右子树y作为A的左子树
LR型例题
RL型调整
C最小所以C做为根结点
1. C结点穿过A、B结点上升
2. A结点作为C结点的左孩子
3. B结点作为C结点的右孩子
4. 原来C结点的左子树β作为A的右子树;
5. 原来C结点的右子树y作为B的左子树
RL型例子
平衡二叉树的调整例题
插入7 进行LR型调整
插入9 进行LL型调整
插入26 进行RR调整
插入18 进行RL调整
插入14
插入15 进行LR调整,调整最小失衡的子树
AVL树构造完毕
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理