AVL树的旋转

转载 2016年08月29日 10:52:40

平衡二叉树在进行插入操作的时候可能出现不平衡的情况,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树的定义出发,一步步推导出旋转的方案。

本文从AVL树的定义出发,一步步地推导出AVL树旋转的方案,这个推导是在已经清楚地知道AVL树的定义这个前提下进行的。文章注重思考的过程,并不会直接给出AVL树是怎样旋转的,用来提醒自己以后在学习的时...

AVL树旋转的一点理解

AVL树的定义: 每一个节点的子树都是一棵AVL树; 每一个节点的左右子树的高度差不超过1 图示说明:圈代表树的节点,三角形代表子树,编号按值的大小进行排序。 以下讨论基于的前提:从图示的最...

【AVL树】AVL树的插入操作以及旋转

在讲解AVL树之前必须了解二叉搜索树, 可以看我之前的博客:二叉搜索树AVL树是在二叉搜索树的基础上,在向二叉树排序树中插入新的结点,如果保证每个结点的左右子树的高度差的绝对值不超过1,即需要在插入...

AVL树的旋转操作 图解 最详细

本文转自:http://blog.csdn.net/collonn/article/details/20128205 和 http://blog.chinaunix.net/uid-25324849...

AVL树 四种旋转的场景

以下图的平衡因子统一为左子树高度减去右子树高度。 1 左单旋 (右右 - 在较高右子树的右侧插入节点)     附上:单个节点声明的代码 struct AVLTreeNode { AVLTr...

【数据结构】AVL树的旋转和插入

AVL树 左单旋 代码实现 void _RotateL(Node* parent) { Node* subR=parent->_right; Node* subRL=subR->_lef...

AVL树的LR和RL旋转

AVL树是指在一颗二叉树中,任一个结点的平衡因子都不超过1。一个节点的平衡因子是该节点的右子树的高度与左子树的高度的差。 为什么要有AVL树? AVL树通常被用在二叉搜索树(BST)中,BST是满...

avl 树旋转

AVL樹旋轉圖解 AVL樹是一顆平衡樹,其左右子樹的高度差不會超過一層。爲了保持這一性質,採用旋轉節點的方式來降低高度。 如下圖,紅色表示新插入的節點,一共4种情況: 左左:節點1插入到...

数据结构-----AVL树的旋转操作

本文主要讲解AVL的旋转操作,供自己复习用,如有不对之处请指出。另外图片是从链接处的大神那复制的,感觉文章写的很好,可以去学习。 http://www.cnblogs.com/QG-whz/p/516...

[数据结构与算法]AVL树的旋转

平衡二叉树在进行插入操作的时候可能出现不平衡的情况,AVL树即是一种自平衡的二叉树,它通过旋转不平衡的节点来使二叉树重新保持平衡,并且查找、插入和删除操作在平均和最坏情况下时间复杂度都是O(log n...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)