AVL 树是二叉搜索树,具有附加特性,即任何节点的左子树和右子树的高度差不能大于 1。以下是有关 AVL 树的一些关键点:
- 如果 AVL 树中有 n 个节点,则 AVL 树的最小高度为 floor(log 2 n)。
- 如果 AVL 树中有 n 个节点,则最大高度不能超过 1.44*log 2 n。
- 如果 AVL 树的高度为 h,则最大节点数可以为 2 h+1 – 1。
- 高度为 h 的树中的最小节点数可以表示为:
N(h) = N(h-1) + N(h-2) + 1 对于 n>2,其中 N(0) = 1 且 N(1) = 2。 - 在 AVL 树中查找、插入和删除的复杂度为 O(log n)。
我们已经讨论了基于 AVL 树的问题类型。
类型一:节点数与AVL树高度的关系——
给定节点数,可以问这个问题来找到 AVL 树的最小和最大高度。此外,给定高度,可以询问最大或最小节点数。
Que – 1.任何具有 7 个节点的 AVL 树的最大高度是多少?假设具有单个节点的树的高度为 0。
(A2
(乙) 3
(三) 4
(四) 5
解决方案:为了找到最大高度,每个级别的节点应该是最小的。假设
高度为 2,所需的最小节点数:
N(h) = N(h-1) + N(h-2) + 1
N(2) = N(1) + N(0) + 1 = 2 + 1 + 1 = 4。
这意味着,高度 2 是使用最少 4 个节点实现的。
假设高度为 3,所需的最小节点数:
N(h) = N(h-1) + N(h-2) + 1
N(3) = N(2) + N(1) + 1 = 4 + 2 + 1 = 7。
这意味着,高度 3 是使用最少 7 个节点实现的。
因此,使用 7 个节点,我们可以实现最大高度为 3。以下是具有 7 个节点和高度 3 的 AVL 树。
Que – 2. AVL 树的最坏情况可能的高度是多少?
(A) 2*logn
(B) 1.44*log n
(C) 取决于实施
(D) θ(n)
解决方案:具有 n 个节点的 AVL 树的最坏情况可能高度为 1.44*logn。这可以使用具有 7 个节点和最大高度的 AVL 树进行验证。
检查选项 (A),2*log7 = 5.6,但是树的高度为 3。
检查选项 (B),1.44*log7 = 4,接近 3。
检查选项 (D),n = 7,但是树的高度为 3。
其中,选项(B)是最佳答案。
类型 2:基于 AVL 树中插入、删除和搜索的复杂性 –
Que – 3.以下哪项是正确的?
(A) 搜索 AVL 树的成本是 θ(log n) 而二叉搜索树的成本是 O(n)
(B) 搜索 AVL 树的成本是 θ(log n) 而完全二叉树的搜索成本是 θ(n log n)
(C) 搜索二叉搜索树的成本是 O(log n ) 但 AVL 树的成本是 θ(n)
(D) 搜索 AVL 树的成本是 θ(n log n) 而二叉搜索树的成本是 O(n)
解: AVL树查找、插入、删除的时间复杂度=O(logn)。但是二叉搜索树,可能是偏斜树,所以在最坏情况下BST搜索,插入和删除复杂度= O(n)。
Que – 4.在具有 n*2^n 个元素的二叉搜索树中搜索平衡元素的最坏情况运行时间是
解决方案:搜索元素所花费的时间是 Θ(logn),其中 n 是 AVL 树中的元素数。
由于给定的元素数为 n*2^n,搜索复杂度为 Θ(log(n*2^n)) 可写为:
= Θ(log(n*2^n))
= Θ(log(n)) + Θ(log(2^n))
= Θ(log(n)) + Θ(nlog(2))
= Θ(log(n)) + Θ(n)
由于 logn 渐近地小于 n,所以 Θ(log(n)) + Θ(n) 可以写成 Θ(n) 与选项 C 匹配。
类型 3:在 AVL 树中插入和删除 –
当从 AVL 树中插入或删除键时,可以在结果树上提出问题。如果平衡因子受到干扰,则需要进行适当的轮换。
Que – 5.考虑下面的 AVL 树。
以下哪个是插入70后更新的AVL树?
(一种)
(二)
(C)
(D) 无
解决方法:先插入元素,方法和BST一样。因此插入 70 后,BST 可以表示为:
然而,平衡因子受到干扰,需要 RL 旋转。要去除 RL 旋转,首先将其转换为 RR 旋转,如下所示:
去除 RR 旋转后,生成的 AVL 树与选项 (C) 相同。