本文概述
- 平衡系数(k)=高度(left(k))-高度(right(k))
- 复杂
- 在AVL树上的操作
- 为什么选择AVL树?
AVL树可以定义为高度平衡的二叉搜索树, 其中每个节点都与一个平衡因子相关联, 该平衡因子是通过从其左子树的高度中减去其右子树的高度来计算的。
【AVL树详细实现】如果每个节点的平衡因子在-1到1之间, 则认为树是平衡的, 否则, 树将不平衡, 需要平衡。
平衡系数(k)=高度(left(k))-高度(right(k)) 如果任何节点的平衡因子为1, 则表示左子树比右子树高一级。
如果任何节点的平衡因子为0, 则表示左子树和右子树的高度相等。
如果任何节点的平衡因子为-1, 则表示左子树比右子树低一级。
下图给出了一个AVL树。我们可以看到, 与每个节点关联的平衡因子在-1和+1之间。因此, 它是AVL树的一个示例。
文章图片
复杂
算法 | 平均情况 | 最差的情况 |
---|---|---|
Space | o(n) | o(n) |
Search | o(log n) | o(log n) |
Insert | o(log n) | o(log n) |
Delete | o(log n) | o(log n) |
序号 | 运作方式 | 描述 |
---|---|---|
1 | Insertion | 以与在二叉搜索树中执行的相同方式执行在AVL树中的插入。但是, 这可能会导致违反AVL树属性, 因此可能需要平衡该树。可以通过应用旋转来平衡树。 |
2 | Deletion | 删除也可以与在二叉搜索树中执行的相同方式执行。删除还可能会干扰树的平衡, 因此, 使用各种类型的旋转来重新平衡树。 |
推荐阅读
- 队列的数组表示
- LeetCode|98. 验证二叉搜索树
- #|如何逆置一个单链表(两种方法)()
- [ 数据结构 -- 手撕排序算法第一篇 ] 插入排序
- 不含回文的最长子字符串的长度
- 使用Fenwick树在L到R范围内大于K的元素数(离线查询)
- 十进制等效项大于或等于K的子字符串的计数
- 修改给定数组以使奇数和偶数索引元素的总和相同
- Java程序打印字符串的不同排列