数据结构:平衡二叉树 AVL

1.需要二叉平衡树的理由

我们平常用二叉搜索树进行查找,若原数列是是有序的,那么构成的二叉搜索时就是完全倾斜的,如下图:

此时退化成了一个链表,查找效率为O(n).查找的效率取决于树的高度。平衡二叉树左右子树的高度相差不超过 1 ,即可保证查找的效率。

2.平衡因子

某节点的左子树与右子树的高度(深度)差即为该节点的平衡因子(BF,Balance Factor),平衡二叉树中不存在平衡因子大于 1 的节点。在一棵平衡二叉树中,节点的平衡因子只能取 0 、1 或者 -1 ,分别对应着左右子树等高,左子树比较高,右子树比较高。

3.AVL树的四种插入节点方式

平衡二叉树的失衡调整主要是通过旋转最小失衡子树来实现的。

  • LL——右单旋
    根节点的左孩子的左子树插入结点,进行右旋

    1)将原根节点的左孩子作为新的根节点,原根节点成为新根节点的右子树
    2)将原左孩子的右孩子作为原根节点的左孩子

  • RR——左单旋
    根节点的右孩子的右子树插入结点,进行左旋

    1)将原根节点的右孩子作为新的根节点,原根节点成为新根节点的左子树
    2)将原右孩子的左孩子作为原根节点的右孩子

  • LR——左右双旋
    根节点的左孩子的右子树插入结点,进行左右双旋

    先对最小失衡子树的左孩子进行左旋,再对根节点进行右旋

  • RL——右左双旋
    根节点的右孩子的左子树插入结点,进行右左双旋

    先对最小失衡子树的右孩子进行右旋,再对失衡点进行右旋

(代码以后有时间再补上)

猜你喜欢

转载自blog.csdn.net/qq_43406565/article/details/105387753