AVL树——深入浅出,一目了然
2015-08-05 23:37
495 查看
欢迎转载,请附出处:
http://blog.csdn.net/as02446418/article/details/47306419
以前总对AVL树有疑惑,到底什么时候左旋什么时候右旋,什么时候双旋,双旋和单旋的情况到底是什么样的呢?
看完本篇博客,相信你也能够一目了然了。
这里声明一下
左旋为:逆进针旋转。
右旋为:顺进针旋转。
情况:
(1)LL:插入一个新节点到根节点的左子树(Left)的左子树(Left),导致根节点的平衡因子由1变为2
(2)RR:插入一个新节点到根节点的右子树(Right)的右子树(Right),导致根节点的平衡因子由-1变为-2
(3)LR:插入一个新节点到根节点的左子树(Left)的右子树(Right),导致根节点的平衡因子由1变为2
(4)RL:插入一个新节点到根节点的右子树(Right)的左子树(Left),导致根节点的平衡因子由-1变为-2
处理办法:
(1)LL情况需要根右旋解决,如下图的情况1和2
(2)RR情况需要根左旋解决,如下图的情况3和4
(3)LR情况需要左右旋(先左子树左旋转,后根部右旋转)解决,如下图情况5和6
(4)RL情况需要右左旋(先右子树右旋转,后根部左旋转)解决,如下图情况7和8
直接上图。
http://blog.csdn.net/as02446418/article/details/47306419
以前总对AVL树有疑惑,到底什么时候左旋什么时候右旋,什么时候双旋,双旋和单旋的情况到底是什么样的呢?
看完本篇博客,相信你也能够一目了然了。
这里声明一下
左旋为:逆进针旋转。
右旋为:顺进针旋转。
情况:
(1)LL:插入一个新节点到根节点的左子树(Left)的左子树(Left),导致根节点的平衡因子由1变为2
(2)RR:插入一个新节点到根节点的右子树(Right)的右子树(Right),导致根节点的平衡因子由-1变为-2
(3)LR:插入一个新节点到根节点的左子树(Left)的右子树(Right),导致根节点的平衡因子由1变为2
(4)RL:插入一个新节点到根节点的右子树(Right)的左子树(Left),导致根节点的平衡因子由-1变为-2
处理办法:
(1)LL情况需要根右旋解决,如下图的情况1和2
(2)RR情况需要根左旋解决,如下图的情况3和4
(3)LR情况需要左右旋(先左子树左旋转,后根部右旋转)解决,如下图情况5和6
(4)RL情况需要右左旋(先右子树右旋转,后根部左旋转)解决,如下图情况7和8
直接上图。
相关文章推荐
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- C#实现获取系统目录并以Tree树叉显示的方法
- 数据结构之Treap详解
- C语言实现输入一颗二元查找树并将该树转换为它的镜像
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- 纯jsp打造无限层次的树代码
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
- java数据结构和算法学习之汉诺塔示例
- Java数据结构及算法实例:三角数字
- Java数据结构之简单链表的定义与实现方法示例