平衡二叉树的插入和调整

在学习二叉树这一部分的时候,觉得平衡二叉树的建立,以及调整还是比较复杂的,看了一些博客和视频,发现了比较好的方法,这里总结一下。


这一部分,首先对平衡二叉树做一个简单的介绍,以及插入调整的几种类型,这些基本所有的书上都讲到了。(了解的直接略过)

平衡二叉树定义

  • 平衡二叉树(AVL树):任意节点的左、右子树高度差的绝对值不超过1。
  • 平衡因子:节点左子树和右子树的高度差,平衡二叉树的平衡因子只能为 -1、0、1.

平衡二叉树插入

  • 二叉排序树保证平衡的基本思想:每当插入或删除节点时,首先要检查是否会导致不平衡。① 如果导致了不平衡,则先找到插入路径上离插入节点最近的平衡因子绝对值大于1的节点A;② 再对以A为根的子树,在保持二叉排序树特性的前提下,调整各节点位置关系,重新达到平衡。

  • 注意:每次调整的对象都是最小不平衡子树。

  • 一般可将失去平衡后进行调整的规律归纳为以下四种情况:

(1)LL平衡旋转(右单旋转)

(2)RR平衡旋转(左单旋转)

(3)LR平衡旋转(先左后右双旋转)

(4)RL平衡旋转(先右后左双旋转)


下面是重点了,具体的插入和调整过程讲解

其实无论是上面的哪一种情况,调整过程都是以下三个步骤:

  1. 找到三个要调整的节点。
  2. 中序排序,找到根、左、右。
  3. 调整。

下面通过实际的例子来说明(画图不方便,就手写了)
平衡二叉树的插入和调整