数据结构之AVL树(平衡二叉树)

什么叫AVL树 平衡二叉树?

说到这个问题我们先说说二叉排序树 它也叫二叉搜索树,它解决数组和链表集合遍历和插入所有优势。但是假如我们是一个这样的树你觉得它的效率还会很高吗?
在这里插入图片描述
如上图中 这样一棵搜索它的效率显然不高,因为除了7 其他的几个数字就类似一个链表。就因为这样的情况,所以平衡二叉树就诞生了,它是为了解决极限情况下,树的搜索效率低下的问题。
那么什么样的树才叫平衡二叉树呢?
作为一个平衡二叉树必须满足下面两个条件:

  1. 它必须是二叉查找树;
  2. 每个节点的左子树和右子树的高度差至多为1。

在这里插入图片描述
看看上面四个树,那些满足平衡二叉树呢?
左上图:58 和 88 不满足左右子树高度最大不超过1
右上图:全部满足
左下图:58不满足
右下图:全部满足

平衡因子 和 最小不平衡子树

在这里插入图片描述
**平衡因子 :**将二叉树上节点的左子树高度减去右子树高度的值称为该节点的平衡因子BF
如上4号图中,我们生成了一个平衡二叉树,那么它每个节点的平衡因子是多少呢?
答案是所有节点平衡因子等于0
那么在没有转换成平衡二叉树之前呢?
1的平衡因子是0
2的平衡因子是1
3的平衡因子是2
4的平衡因子是3
5的平衡因子是4
6的平衡因子是4
7的平衡因子是0
最小不平衡子树: 距离插入节点最近的,且平衡因子的绝对值大于1的节点为根的子树
如上图中 1 2 3号图中的 虚线方框中的 子树, 就称之为 最小不平衡子树

旋转建平衡二叉树

左旋 右旋操作

在这里插入图片描述

左旋规律就是 目标节点(X)的右子树节点(Y)的左子树(β) 要作为目标节点(X)右子节点树
在这里插入图片描述
右旋规律是把目标节点(Y)的左子树(X)的右子树节点(β)移到目标节点(Y)的左子树节点上
注意: 上面的左旋和右旋规则,非常重要,它是平衡二叉树 进行建树的思路基础。

平衡操作

当一个树的节点左边或者右边出现最小不平衡子树时,我们需要对这个最小不平衡子树进行左旋 右旋或者 左旋加右旋操作使得树最后成为平衡二叉树。

左平衡操作

即结点t的不平衡是因为左子树过深

  1. 如果新的结点插入到t的左孩子的左子树中,则直接进行右旋操作即可
    在这里插入图片描述
    注意发现规律,t节点右旋,所以t节点的左子树的右节点 被移到了 目标节点的左边。

  2. 如果新的结点插入到t的左孩子的右子树中,则需要进行分情况讨论

    • 情况a: 当t的左孩子的右子树根节点的balance = RIGHT_HIGH
      在这里插入图片描述
      同样的规律,第二步旋转中的 t节点右旋,所以t节点的左子树的右节点 被移到了 目标节点的左边。

    • 情况b:当t的左孩子的右子树根节点的balance = LEFT_HIGH
      在这里插入图片描述
      左旋规律 tl左旋,所以他的右子节点的 左子树 5 要被移到目标节点 tl 的右子树上

      扫描二维码关注公众号,回复: 9639612 查看本文章

右平衡操作

即结点t的不平衡是因为右子树过深

  1. 如果新的结点插入到t的右孩子的右子树中,则直接进行左旋操作即可
    在这里插入图片描述
    对t进行左旋所以目标节点t的右子节点的左子树 trl 在旋转完成以后,会被移到 目标节点t 的右子节点上
  2. 如果新的结点插入到t的右孩子的左子树中,则需要进行分情况讨论
    • 情况a:当t的右孩子的左子树根节点的balance = LEFT_HIGH
      在这里插入图片描述
      同样的规律,在第二步旋转中, 对目标节点 t进行左旋,我们需要把 t 的右子节点的左子树 移到t的右节点上。
    • 情况b:当t的右孩子的左子树根节点的balance = RIGHT_HIGH
      在这里插入图片描述
      对目标节点 tr进行右旋 ,我们需要把目标节点tr 的左子节点的右子树,移到目标节点tr 的左子节点上。

综上我们在新建树过程中 所有出现最小不平衡子树情况时,需要进行的旋转操作。 同时我们也需要更改对应的节点上的平衡因子的值。 最终我们就完成了一个 平衡二叉树的建树操作。

问题

平衡二叉树可以把搜索速度效率做到最好,但是在增加或者删除节点时,随时都可能改变整个树的结构,需要便随着大量的左旋 右旋操作,重新构成一个平衡二叉树。 这样大的计算量并不是我们想要的。 这个时候红黑树就出现了,他是为了解决平衡二叉树的这个问题诞生的。 降低一小部分搜索效率,但是建树难度却大大提高。

发布了58 篇原创文章 · 获赞 16 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/dingshuhong_/article/details/104506181