平衡二叉树(AVL)的插入与调整
平衡二叉树:
定义:一种特殊的二叉查找树,树上任一结点的左子树和右子树的深度之差不超过1(平衡因子:左右子树深度之差,只要有任一结点的平衡因子绝对值大于1,就不是平衡二叉树)。
平衡二叉树的插入
在一个平衡二叉树中插入一个结点时,又可能会出现失衡,即出现平衡因子绝对值大于1的结点,如:2,-2.
比如下面这个例子:
接下来就必须要重新调整树的结构,恢复平衡。每次调整的对象称为最小不平衡树。
平衡调整的四种类型
4种类型如下图:
平衡调整
之前学习的大部分方法都是左旋调整,右旋调整以及先左旋再右旋,先右旋再左旋,虽然也是对的,但是可能容易晕(个人见解),在这里总结一下平衡二叉树的调整:中序遍历最小不平衡子树,取中间结点作为双亲结点,其余两个结点作为子结点。(更简单一点的说法就是,由于二叉排序树本身的特点,中序遍历我们会得到一个递增的序列)
下图可以更好的说明:
调整原则:(1)降低高度(2)保持二叉排序树的性质
平衡二叉树构造举例
输入关键字序列{16,3,7,11,9,26,18,14,15}给出构造一棵AVL树的步骤