数据结构-自平衡二叉排序树AVL Tree(基础知识)

自平衡二叉排序树简介

自平衡二叉排序树 AVL Tree

二叉树有一个最大的缺陷就是在最糟糕情况下,二叉树呈现单链表的数据结构。为了杜绝这个问题产生了中特定规则的树,其中一个非常著名的是平衡二叉树。

平衡二叉树每个结点,其左右子树的深度之差的绝对值小于等于 1

自平衡二叉排序树快在查找,删除和插入影响性能

自平衡二叉排序树的旋转

法则:

  • 左左型:向右旋转
  • 右右型:向左旋转
  • 左右型:先向右旋转,再向左旋转
  • 右左型:先向左旋转,再向右旋转

二叉排序树当存入结点一个比一个大时,呈现全部为右子树的单链表形式,这种方式查找效率就比较低了。因此我们想到自平衡二叉排序树,左右子树深度差的绝对值小于等于 1,然后每次插入一个结点,它进行自平衡一次达到平衡二叉树的规则即可。那么我们如何去平衡呢?下面我举几个例子:

  • 左左型

    如下图左左形将 12 结点往右旋转,使得 11 重新成为根结点

    在这里插入图片描述

  • 右右型

    如下图右右形将 10 结点往左旋转,使得 11 重新成为根结点

    在这里插入图片描述

  • 左右型

    如下图左右形,将 12 结点先向右旋转使得 10 作为根,再将 10 结点向左旋转使得 11 作为根

    在这里插入图片描述

  • 右左型

    如下图右左形,将 10 结点先向左旋转使得 12 作为根,再将 12 结点向右旋转使得 11 作为根

    在这里插入图片描述

自平衡二叉排序树的优势

自平衡的二叉排序树可以避免单链表形式的二叉树,可以实现快速查找(二分查找)

自平衡二叉排序树的缺陷

自平衡的二叉排序树缺陷也很明显,那就是我们每次删除或加入新的树节点时候,总会打破“平衡”这一准则,所以我们每次几乎都要改变树的结构使其“平衡”,因此当我们处于删除插入频繁的场景中时,这种数据结构的性能就会大打折扣了!

自平衡二叉排序树的缺陷补漏

红黑树诞生了!

发布了197 篇原创文章 · 获赞 62 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/abcnull/article/details/104580534
今日推荐