在学习二叉树这一部分的时候,觉得平衡二叉树的建立,以及调整还是比较复杂的,看了一些博客和视频,发现了比较好的方法,这里总结一下。
这一部分,首先对平衡二叉树做一个简单的介绍,以及插入调整的几种类型,这些基本所有的书上都讲到了。(了解的直接略过)
平衡二叉树定义
- 平衡二叉树(AVL树):任意节点的左、右子树高度差的绝对值不超过1。
- 平衡因子:节点左子树和右子树的高度差,平衡二叉树的平衡因子只能为 -1、0、1.
平衡二叉树插入
-
二叉排序树保证平衡的基本思想:每当插入或删除节点时,首先要检查是否会导致不平衡。① 如果导致了不平衡,则先找到插入路径上离插入节点最近的平衡因子绝对值大于1的节点A;② 再对以A为根的子树,在保持二叉排序树特性的前提下,调整各节点位置关系,重新达到平衡。
-
注意:每次调整的对象都是最小不平衡子树。
-
一般可将失去平衡后进行调整的规律归纳为以下四种情况:
(1)LL平衡旋转(右单旋转)
(2)RR平衡旋转(左单旋转)
(3)LR平衡旋转(先左后右双旋转)
(4)RL平衡旋转(先右后左双旋转)
具体的插入和调整过程讲解(重点)
其实无论是上面的哪一种情况,调整过程都是以下三个步骤:
- 找到三个要调整的节点。
- 中序排序,找到根、左、右。
- 调整。
下面通过实际的例子来说明(画图不方便,就手写了)