平衡二叉树

原创 2017年01月03日 11:52:35

转自yongli1992



树旋转是在二叉树中的一种子树调整操作, 每一次旋转并不影响对该二叉树进行中序遍历的结果. 树旋转通常应用于需要调整树的局部平衡性的场合. 树旋转包括两个不同的方式, 分别是左旋转和右旋转. 两种旋转呈镜像, 而且互为逆操作.

 平衡二叉树在进行插入操作的时候可能出现不平衡的情况,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型相反。



版权声明:本文为博主原创文章,未经博主允许不得转载。

平衡二叉树源码

  • 2015年05月14日 10:23
  • 5KB
  • 下载

C语言实现平衡二叉树

  • 2015年08月10日 22:21
  • 7KB
  • 下载

平衡二叉树构建过程中的旋转

若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性。首先要找出插入新结点后失去平衡的最小子树根结点的指针。然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树。当失去平衡的最小子树被...

平衡二叉树

  • 2008年07月02日 20:01
  • 12KB
  • 下载

平衡二叉树产生

  • 2011年12月11日 21:19
  • 10KB
  • 下载

为什么引入“平衡二叉树”

转自:http://www.cnblogs.com/Clingingboy/archive/2010/10/08/1845854.html     http://www.cnblogs.com/...

平衡二叉树

  • 2013年06月24日 13:08
  • 5KB
  • 下载

中南民族大学平衡二叉树

  • 2014年12月14日 14:39
  • 1.2MB
  • 下载

索引--优化数据结构--平衡二叉树(avl)

天下文章一大抄,最近在做第二版的搜索引擎,比起第一版总要有很大的改进才行。 首先想到的是要对数据结构进行优化,就要把原来“倒排索引--二叉树 ”http://blog.csdn.net/txgc0...
  • txgc0
  • txgc0
  • 2013年05月02日 17:37
  • 644

平衡二叉树

  • 2015年10月31日 10:48
  • 4KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:平衡二叉树
举报原因:
原因补充:

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