在本文中,我们将讨论二叉树(包括 BST 和 AVL 树)中不同操作的复杂性。在理解本文之前,您应该有以下基本概念:二叉树、二叉搜索树和 AVL 树。
二叉树的主要操作有:查找、插入和删除。我们将在二叉树中看到这些操作的最坏情况时间复杂度。
二叉树 –
在二叉树中,一个节点最多可以有两个孩子。考虑图 1 所示的左偏二叉树。
- 搜索:为了搜索元素 2,我们必须遍历所有元素(假设我们进行广度优先遍历)。因此,在二叉树中搜索的最坏情况复杂度为 O(n)。
- 插入:为了将元素作为 2 的左子元素插入,我们必须遍历所有元素。因此,在二叉树中插入的最坏情况复杂度为 O(n)。
- 删除:对于元素2的删除,我们必须遍历所有元素才能找到2(假设我们做广度优先遍历)。因此,在二叉树中删除的最坏情况复杂度为 O(n)。
二叉搜索树 (BST) –
BST 是一种特殊类型的二叉树,其中节点的左子节点的值小于父节点的值,而右子节点的值大于父节点的值。考虑图 2 所示的左偏 BST。
- 搜索:为了搜索元素 1,我们必须遍历所有元素(按 3、2、1 的顺序)。因此,在二叉搜索树中搜索的最坏情况复杂度为 O(n)。一般来说,时间复杂度是 O(h),其中h是 BST 的高度。
- 插入:对于插入元素0,它必须作为1的左子元素插入。因此,我们需要遍历所有元素(按3、2、1的顺序)插入0,其最坏情况复杂度为O(n)。一般来说,时间复杂度是 O(h)。
- 删除:要删除元素1,我们必须遍历所有元素找到1(按3、2、1的顺序)。因此,在二叉树中删除的最坏情况复杂度为 O(n)。一般来说,时间复杂度是 O(h)。
AVL/高度平衡树 –
AVL树是二叉搜索树,附加属性是任意节点的左子树和右子树的高度差不能大于1。例如,图2所示的BST不是AVL作为左子树之间的差-树和节点3的右子树为2。然而,图3所示的BST是AVL树。
- 搜索:为了搜索元素 1,我们必须遍历元素(按 5、4、1 的顺序)= 3 = log 2 n。因此,在 AVL 树中搜索的最坏情况复杂度为 O(log 2 n)。
- 插入:对于插入元素12,它必须作为9的右孩子插入。因此,我们需要遍历元素(按5、7、9的顺序)插入12,其最坏情况复杂度为O(log 2 n)。
- 删除:对于元素9的删除,我们必须遍历元素找到9(按5、7、9的顺序)。因此,在二叉树中删除的最坏情况复杂度为 O(log 2 n)。
我们将讨论基于二叉树操作复杂性的问题。
Qu-1。一般二叉搜索树中搜索、插入和删除操作的最坏情况时间复杂度是多少?
(A) O(n) 所有
(B) O(Logn) 所有
(C) O(Logn) 用于搜索和插入,O(n) 用于删除
(D) O(Logn) 用于搜索,O(n) 用于插入和删除
解决方案:如上所述,BST 中的所有操作的最坏情况时间复杂度为 O(n)。所以,正确选项是(A)。
阙2。在二叉树、BST 和 AVL 树中搜索的最坏情况时间复杂度分别是多少?
(A) O(n) 所有
(B) O(Logn) 所有
(C) 二叉树的 O(n),其他的 O(Logn)
(D) 二叉树和 BST 为 O(n),AVL 为 O(Logn)
解决方案:如上所述,二叉树和 BST 中的搜索操作的最坏情况时间复杂度为 O(n)。然而,AVL 树的最坏情况时间复杂度为 O(logn)。所以,正确的选项是(D)。