基于值的二叉搜索树复杂度

时间:2018-12-05 14:34:59

标签: c tree big-o binary-search-tree complexity-theory

我已经用C语言创建了一个二进制搜索树,当我测试我的树时,插入和搜索操作需要花费不同的时间来执行。例如,我有两种情况,即插入1到10000之间的随机值,并插入1到10000之间的排序值。当我将1到10000的随机值插入我的BST时,比插入1到10000的排序值要少我的BST。
在我的BST中执行搜索操作的过程也是如此,在我搜索那些随机值时花费的时间更少,但是在我的BST中搜索排序的值时花费的时间太长。 现在,问题是时间的复杂性,任何人都可以解释,如何处理?这四种情况的时间复杂度是多少?

注意::插入和搜索这些排序后的值几乎需要相同的时间,而搜索仍然需要更长的时间!

2 个答案:

答案 0 :(得分:1)

如果不平衡树,则其结构取决于插入顺序,“完全不平衡”的二叉搜索树等同于排序的链表。
因此,最差的操作时间复杂度在树的大小中是线性的,而不是平衡树中的对数。

例如,如果您从1开始插入并递增,则最终会得到

 1
/\
  2
  /\
    3
    /\
     ...

其中右边的“脊椎”是链接列表。

答案 1 :(得分:0)

使用AVL树。它将使您的树保持平衡,并且您将始终获得log(n)的搜索时间