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树的前提是二叉排序树(BST或叫做二叉搜索树)。由于在生成BST树的过程中可能会出现线型树结构,比如插入的顺序是:1, 2, 3, 4, 5, 6,...
  • u013761665
  • u013761665
  • 2015年12月28日 12:49
  • 10389

AVL树-自平衡二叉查找树(Java实现)

在计算机科学中,AVL树是最先发明的自平衡二叉查找树。AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 "An algorith...
  • liyong199012
  • liyong199012
  • 2014年06月07日 19:29
  • 8228

使用C++实现AVL树模板

今天练习编写了一下AVL树。参考了Weiss的数据结构与算法C++描述版。上一个实现的一个一般的二叉搜索树,在使用的过程中可能会慢慢变得不平衡,这样很可能会降低查找、插入等等的效率,因此我们需要使用算...
  • cjbct
  • cjbct
  • 2016年12月13日 22:32
  • 1226

AVL树的旋转和插入

包含了AVL树的单旋转和双旋转的算法,以及AVL树的递归插入和非递归插入算法。单旋转也叫“一”字形旋转,又可分为左-左型旋转和右-右型旋转;双旋转也叫“之”字形旋转,又可分为左-右型旋转和右-左型旋转...
  • DragonBark
  • DragonBark
  • 2018年01月16日 18:16
  • 3

数据结构:关于AVL树的平衡旋转详解

AVL树又叫做平衡二叉树。前言部分我也有说到,AVL树的前提是二叉排序树(BST或叫做二叉搜索树)。由于在生成BST树的过程中可能会出现线型树结构,比如插入的顺序是:1, 2, 3, 4, 5, 6,...
  • u013761665
  • u013761665
  • 2015年12月28日 12:49
  • 10389

AVL树的平衡调整,LL,LR,RR,RL旋转 (二)

1. 概述 AVL树是最早提出的自平衡二叉树,在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。AVL树得名于它的发明者G.M. Adelson-Velsky和E.M. La...
  • lxmsxpm
  • lxmsxpm
  • 2013年12月28日 10:36
  • 4334

平衡二叉树 AVL 的插入节点后旋转方法分析

平衡二叉树 AVL( 发明者为Adel'son-Vel'skii 和 Landis)是一种二叉排序树,其中每一个节点的左子树和右子树的高度至多等于1。 首先我们知道,当插入一个节点,从此插入点到树根节...
  • Simba888888
  • Simba888888
  • 2013年10月28日 21:02
  • 5867

AVL树的插入操作(旋转)图解

AVL树的概念        转载至:cc 在说AVL树的概念之前,我们需要清楚二茬搜索树的概念。对于二叉搜索树,我们知道它可以降低查找速率,但是如果一个二叉搜索树退化成...
  • su_ren
  • su_ren
  • 2017年06月16日 21:29
  • 142

AVL 平衡二叉树旋转方法

1、预备知识定义树(tree)的一种自然的方式是递归的方式。一棵树使一些节点的集合。这个集合可以是空集;若不是空集,则树由称作根(root)的节点 r 以及 0 个或多个非空的(子)树 T1,T2,T...
  • wanghanlincsdn
  • wanghanlincsdn
  • 2017年03月10日 21:05
  • 540

AVL树的旋转图解和简单实现

AVL树是带有平衡条件的查找二叉树。这个平衡条件要容易保持,而且他要保证树的深度为O(logN)原文地址:http://blog.csdn.net/qq_25806863/article/detail...
  • qq_25806863
  • qq_25806863
  • 2017年07月07日 18:03
  • 302
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AVL树的旋转
举报原因:
原因补充:

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