从上面简单的定义我们可以得出几个重要的信息:

  • 平衡二叉树又称AVL 树
  • 平衡二叉树必须是二叉排序树
  • 每个节点的左子树和右子树的高度差至多为 1。

树的高度和深度

树的高度和深度本质区别:深度是从根节点数到它的叶节点,高度是从叶节点数到它的根节点。

指向原始笔记的链接

平衡因子= 左子树高度 - 右子树高度


旋转操作

左旋:

定义旋转中心是 E(将 E 左旋指的就是这个)。S 代替 E 作为根节点,S 左子树作为 E 的右子树,E 作为 S 左子树

作用是增大 E 和 S 的平衡因子,同时保持排序性质不变(E+2 或 +1(下面都平衡的情况),S+1)

右旋同理


插入

下面的 L 和 R 指的是多出来的位置,也就是插入的位置

插入的时候可能会有多个祖先节点出现失衡,只需要调整最近的一个就行

LL 型:

在插入位置往上找,第一个平衡因子为 2 的祖先 A,并且祖先的左孩子 B 的平衡因子为 1(可以判断这个时候在第一个失衡结点的左左处最长)

然后以 A 为中心右旋,旋转过后 AB 两个平衡因子都为 0

LR 型:

先左旋左孩子,再右旋自己(失衡位置)

删除

删除的话需要依次向上检查节点是否失衡,可能不止一次调整。删除的操作参考 二叉搜索树