平衡二叉查找树(AVL树)总结
来源:互联网 发布:开关电源仿真软件psim 编辑:程序博客网 时间:2024/05/22 04:43
1. AVL树定义
解析:它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树
的深度之差的绝对值不超过1。若将二叉树上结点的平衡因子定义为该结点的左子树的深度减去它的右子树的深度,
则平衡二叉树上所有结点的平衡因子只可能是-1、0和1。
2. AVL树旋转
解析:假如由于在二叉排序树上插入结点而失去平衡的最小子树根结点的指针为a(即a是离插入结点最近,且平衡因
子绝对值超过1的祖先结点),那么失去平衡后进行调整的规律可归纳为4种情况,如下所示:
(1)单向右旋平衡处理:由于在*a的左子树根结点的左子树上插入结点,*a的平衡因子由1增至2,致使以*a为根的
子树失去平衡,则需进行一次向右的顺时针旋转操作。(a)
(2)单向左旋平衡处理:由于在*a的右子树根结点的右子树上插入结点,*a的平衡因子由-1变为-2,致使以*a为根结
点的子树失去平衡,则需进行一次向左的逆时针旋转操作。(c)
(3)双向旋转(先左后右)平衡处理:由于在*a的左子树根结点的右子树上插入结点,*a的平衡因子由1增至2,致
使以*a为根结点的子树失去平衡,则需进行两次旋转(先左旋后右旋)操作。(b)
(4)双向旋转(先右后左)平衡处理:由于在*a的右子树根结点的左子树上插入结点,*a的平衡因子由-1变为-2,致
使以*a为根结点的子树失去平衡,则需进行两次旋转(先后旋后左旋)操作。(d)
3. AVL树插入
解析:当在AVL树插入结点而失去平衡时,仅需对最小不平衡子树进行平衡旋转处理。如下所示:
(1)若AVL为空树,则插入一个数据元素为e的新结点作为AVL的根结点,树的深度增1;
(2)若e的关键字和AVL的根结点的关键字相等,则不进行插入;
(3)若e的关键字小于AVL的根结点的关键字,而且在AVL的左子树中不存在和e有相同关键字的结点,则将e插入在
AVL的左子树上,并且当插入之后的左子树深度增加(+1)时,如下所示:
(a)AVL根结点平衡因子为-1(右子树的深度大于左子树的深度),则将根结点平衡因子更改为0,AVL深度不变;
(b)AVL的根结点的平衡因子为0(左、右子树的深度相等),则将根结点的平衡因子更改为1,AVL的深度增1;
(c)AVL的根结点的平衡因子为1(左子树的深度大于右子树的深度),若AVL的左子树根结点的平衡因子为1,则需
进行单向右旋平衡处理,并且在右旋处理之后,将根结点和其右子树根结点的平衡因子更改为0,树的深度不变;
(4)若e的关键字大于AVL的根结点的关键字,而且在AVL的右子树中不存在和e有相同关键字的结点,则将e插入在
AVL的右子树上,并且当插入之后的右子树深度增加(+1)时,其处理操作和(3)中所述相对称。
说明:若AVL的左子树根结点的平衡因子为-1,则需进行先向左、后向右的双向旋转平衡处理,并且在旋转处理之
后,修改根结点和其左、右子树根结点的平衡因子,树的深度不变。
4. AVL树查找和删除
解析:
(1)AVL树查找:AVL树查找与二叉查找树基本相同。
(2)AVL树删除:叶子结点;左子树或右子树有一个为空;左右子树都不空。
说明:从AVL树中删除,可以通过把要删除的节点向下旋转成一个叶子节点,接着直接移除这个叶子节点来完成。
参考文献:
[1] 数据结构(C语言版)
[2] AVL:An algorithm for the organization of information
[3] AVL树:https://zh.wikipedia.org/wiki/AVL树
- 平衡二叉查找树(AVL树)总结
- AVL树(平衡二叉查找树)
- AVL树(平衡二叉查找树)
- AVL树(平衡二叉查找树)
- 平衡二叉查找树(AVL)
- 平衡二叉查找树[AVL]
- AVL--平衡二叉查找树
- 平衡二叉查找树 [AVL]
- 平衡二叉查找树 [AVL]
- 平衡二叉查找树 [AVL]
- AVL二叉平衡查找树
- 查找、检索 算法-总结3 平衡二叉查找树 [AVL]
- 平衡二叉查找树(AVL)的查找、插入、删除
- 平衡二叉查找树(AVL)的查找,插入,删除
- ADT(二叉查找树)和AVL(平衡二叉树)总结
- AVL树—平衡二叉查找树
- 动态查找之平衡二叉树(AVL)
- 平衡二叉查找树 AVL 的实现
- 成都的互联网大厂,你知道几个?
- CentOS7.3最小化安装ifconfig找不到解决办法
- Gson使用
- Kaldi 现在提供 TensorFlow 集成
- 表空间,序列
- 平衡二叉查找树(AVL树)总结
- JAVA springmvc自动转换日期类型的格式
- socket
- 人工智能发展现状
- jn-社团申请必须要上传图片
- 传智播客大数据全套视频教程(90G)
- [DevExpress]DateEdit设置显示日期和时间
- HDU6214 Smallest Minimum Cut【网络流】
- Session和Cookie的联系和区别