右单旋的具体情况
2026/5/14 6:28:06 网站建设 项目流程

右单旋的具体情况

  • 1、h为0
  • 2、h为1
  • 3、h为2
  • 4、h为3

在“AVL树的模拟实现”一文中,我们学习到旋转调整方法的时候,使用的需要旋转调整的示例,都是一些抽象的二叉搜索树:

如图的树a, b, c都是抽象的树。插入节点(红色方框)之前,三个树的高度都是h。

我们设下图的树为原树,然后对h做一点讨论,进而展示出具体的需要旋转调整的例子的个数。

1、h为0

h为0,那就只剩下节点⑩和节点⑤了。我们不可能在一个nullptr之下再插入一个节点,所以h为0,就没有需要右单旋的情况。

2、h为1

h为1,就是一个节点是一个树:


此时,节点④是树a,节点⑨是树b,节点15是树c。

要想构成一个需要右单旋的不平衡二叉搜索树,我们就要让树a的高度增加,所以我们可以在节点④的两边插入:


所以h为1,有两种情况需要右单旋。

3、h为2

h为2的树有三种:

对于原树,⑤节点的左边必须入树1这个满二叉树。如果入了树2或树3,那么就会有两种情况:

  • 新插入节点,不会使得原树的平衡被破坏
  • 新插入节点,⑤节点的左子树自己就需要旋转


而⑤节点的右边,和⑩节点的右边,三种h为2的树都可以选。

⑤节点的右边,和⑩节点的右边三种树都可以选,那么就有:3 * 3 = 9种情况。

而对于⑤左边的满二叉树,插入一个节点,可以插在4个地方:

那么一共有:4 * 9 = 36种情况。

4、h为3

我们必须明确,原树的节点⑤的左边,必须插入:

  • 满二叉树
  • 前两层符合满二叉树,第三层有3个节点

否则插入节点后,就会出现后无需旋转,或子树自身旋转的情况。

而原树节点⑤的右边,节点⑩的右边,插入的h为3二叉树,其前两层也必须是满的,否则也会出现插入后无需旋转,或子树自身旋转的情况。

h为3的二叉树:


满二叉树:1种情况

树-C-n-4:

  • 第三层有一个节点:C 4 1 = 4 C_4^1=4C41=4
  • 第三层有两个节点:C 4 2 = 6 C_4^2=6C42=6
  • 第三层有三个节点:C 4 3 = 4 C_4^3=4C43=4

那么树-C-n-4:共有14种情况

那么对于原树,树c(节点⑩的右边)和树b(节点⑤的右边)就各有15种情况,组合起来有:15 * 15 = 225种情况。

对于树a,如果树a是满二叉树,那么就有8个插入位置,可以构成原树需要右单旋的情况:

如果树a是由满二叉树缺了一个节点得来的,那么插入节点,必须插入到树a第三层的相邻两个节点的其中之一的下面:


插入到下面,有4种情况;h为3的满二叉树缺一个节点的情况,也为C 4 3 = 4 C_4^3=4C43=4种。

所以节点的插入,有8 + 4 * 4 = 24种。

那么h为3,最终有:225 * 24 = 5400种情况,需要原树进行右单旋。

所以我们举出具体的例子来演示右单旋,是有很多具体例子的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询