以AVL树为例理解二叉树的旋转(Rotate)操作
来源:互联网 发布:php是什么货币 编辑:程序博客网 时间:2024/06/15 20:36
转载自:点击打开链接
树旋转是在二叉树中的一种子树调整操作, 每一次旋转并不影响对该二叉树进行中序遍历的结果. 树旋转通常应用于需要调整树的局部平衡性的场合. 树旋转包括两个不同的方式, 分别是左旋转和右旋转. 两种旋转呈镜像, 而且互为逆操作.
平衡二叉树在进行插入操作的时候可能出现不平衡的情况,AVL树即是一种自平衡的二叉树,它通过旋转不平衡的节点来使二叉树重新保持平衡,并且查找、插入和删除操作在平均和最坏情况下时间复杂度都是O(log n)
AVL树的旋转一共有四种情形,注意所有旋转情况都是围绕着使得二叉树不平衡的第一个节点展开的。
1. LL型
平衡二叉树某一节点的左孩子的左子树上插入一个新的节点,使得该节点不再平衡。这时只需要把树向右旋转一次即可,如图所示,原A的左孩子B变为父结点,A变为其右孩子,而原B的右子树变为A的左子树,注意旋转之后Brh是A的左子树(图上忘在A于Brh之间标实线)
2. RR型
平衡二叉树某一节点的右孩子的右子树上插入一个新的节点,使得该节点不再平衡。这时只需要把树向左旋转一次即可,如图所示,原A右孩子B变为父结点,A变为其左孩子,而原B的左子树Blh将变为A的右子树。
3. LR型
平衡二叉树某一节点的左孩子的右子树上插入一个新的节点,使得该节点不再平衡。这时需要旋转两次,仅一次的旋转是不能够使二叉树再次平衡。如图所示,在B节点按照RR型向左旋转一次之后,二叉树在A节点仍然不能保持平衡,这时还需要再向右旋转一次。
4. RL型
平衡二叉树某一节点的右孩子的左子树上插入一个新的节点,使得该节点不再平衡。同样,这时需要旋转两次,旋转方向刚好同LR型相反。
- 以AVL树为例理解二叉树的旋转(Rotate)操作
- 以AVL树为例理解二叉树的旋转(Rotate)操作
- AVL树旋转的操作
- AVL树的旋转操作
- AVL树的旋转操作
- AVL树的旋转操作
- 5-6 Root of AVL Tree (25分) (二叉平衡树的旋转操作)
- 平衡二叉树(AVL树)的平衡旋转
- 平衡二叉树(AVL树,AVL树旋转)
- AVL树旋转的一点理解
- 【AVL树】AVL树的插入操作以及旋转
- AVL树的旋转,插入,删除操作
- 数据结构-----AVL树的旋转操作
- AVL树的旋转操作详解
- AVL树的旋转与插入操作
- AVL树的插入操作(旋转)图解
- AVL平衡二叉树中旋转操作的本质及其实现
- AVL树的旋转
- JSONP的问题与解决
- Oracle数据类型与.NET中的对应关系
- 周志华《机器学习》习题3.3
- mysql优化
- react仿京东客户端首页导航条动画效果
- 以AVL树为例理解二叉树的旋转(Rotate)操作
- 【C#】简易编码与解码小程序
- android stutio创建证书与打包APP上线、配制gradle中的证书,使用第三方平台SDK方便开发调试
- angular之$scope
- 链表
- 用JavaScript编写的一个点名系统
- 【微信小程序】在手机上查看调试微信小程序
- 几种垃圾回收机制
- 《React-Native系列》RN组件之Text和TextInput以及注意要点