图解:什么是AVL树?

本文详细介绍了AVL树的概念,包括平衡因子、左旋和右旋操作,以及平衡二叉树的插入操作。通过实例展示了不同情况下的旋转过程,确保每次插入后仍保持平衡。同时,分析了插入操作的时间复杂度,并提供LeetCode相关题目的解题思路。
摘要由CSDN通过智能技术生成

平衡二叉树基础篇

什么是平衡二叉树?

平衡二叉树(Balanced Binary Tree 或 Height-Balanced Tree)又称为 AVL 树,其实就是一颗 平衡的二叉排序树 ,解决了昨天讲的二叉排序树的不平衡问题,即斜树。AVL树或者是一颗空树,或者是具有下列性质的二叉排序树:

它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过 1 。

什么是平衡因子?

平衡二叉树上结点的 平衡因子  BF(Balanced Factor) 定义为该结点的左子树深度减去它的右子树的深度,平衡二叉树上所有结点的平衡因子只可能是 -1,0,1。

上面的两个树就是典型的平衡二叉树,首先它是一颗二叉排序树,其次每一个结点的平衡因子都是 -1,0,1三个数当中的一个。比如上面的左图,红色的数字为结点的平衡因子,对于任意一个叶子结点而言,其左右孩子都为空,左子树的深度为 0 ,右子树的深度为 0 ,所以 AVL树当中的叶子结点的平衡因子都是 0 ;其他结点的平衡因子同样通过左子树深度减去右子树深度可以求得,比如上图中 左侧 的AVL树中,结点 3左子树深度为 2右子树深度为1 ,所以结点3的平衡因子就是 1;上图中 右侧 的AVL树中,结点 3 的左子树深度为2,右子树深度为3,则平衡因子为 2 - 3 = -1 。再来看看不平衡的情况。

上图中就是不平衡的二叉排序树,非AVL树 。上图 左侧 的树中,结点 6 的平衡因子为 2,该平衡因子是结点 6 左子树深度 3 减去右子树深度 1 所得;右侧 的树中,结点 6 的左子树深度0减去右子树深度2,即为-2, 所以这两棵树都不是平衡二叉树。

什么是左旋?什么又是右旋?

为了确保每一次插入操作后,树仍然是一颗 AVL 树,我们就需要对之前分享的 BST(二叉排序树) 的插入操作进行平衡操作,而左旋和右旋操作就是保证二叉排序树特性的基础之上,维持每一次插入操作后树一直保持AVL树的基本操作。

分别表示 的子树。右旋操作 的右子树 作为 的左子树,然后将 作为 的右子树。这样做的原因何在?还记得平衡二叉树的特性是,对于树中的每一个结点,其左子树中的结点均比结点的值小,右子树中结点的值均比结点的值大,那么对于上图 左侧 的树而言, 的右子树

AVL树是一种自平衡的二叉查找树,它的命名来自于发明者Adelson-Velsky和Landis的名字。AVL树要求任何节点的左右子树高度差不超过1,通过旋转操作来维持平衡,从而保证了AVL树的最长路径不会超过最短路径的两倍,是一种高度平衡的二叉查找树。 与AVL树不同的是,红黑树是另一种自平衡的二叉查找树,它通过对节点进行颜色标记,通过旋转和变色操作来保证树的平衡。红黑树的平衡性不如AVL树强,但是插入、删除和查找操作的平均时间复杂度仍然保持在O(logn)级别。 AVL树和红黑树的区别主要体现在以下几个方面: 1. 平衡性:AVL树要求任何节点的左右子树高度差不超过1,因此它是一种高度平衡的二叉查找树;而红黑树只要求任何节点的左右子树的黑色节点数目相等,因此它是一种近似平衡的二叉查找树。 2. 插入和删除操作的效率:由于AVL树的平衡要求比较严格,因此在插入和删除节点时需要进行更多的旋转操作,导致效率相对较低;而红黑树的平衡要求相对宽松,因此在插入和删除节点时需要进行的旋转操作相对较少,效率较高。 3. 查询操作的效率:由于AVL树是一种高度平衡的二叉查找树,因此在进行查询操作时,树的高度较低,效率较高;而红黑树的平衡性较AVL树稍差,因此在进行查询操作时,树的高度相对较高,效率较低。 综上所述,AVL树和红黑树各有优缺点,需要根据具体的应用场景选择合适的数据结构。如果需要在插入、删除和查询操作中都要求较高的效率,可以考虑使用红黑树;如果需要保证树的高度平衡,可以使用AVL树
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值