将N个项插入空二进制搜索树

时间:2009-05-13 21:51:46

标签: binary-tree big-o

为什么最坏的情况是将O项插入空二进制搜索树n ^ 2?没有余额检查。

2 个答案:

答案 0 :(得分:6)

每个项目是O(n),并且有n个项目。即使每个项目的O(n)是“随着它增加”n,你仍然得到0 + 1 + 2 + 3 ...(n-1),即n(n-1)/ 2 = O( N ^ 2)。

换句话说,假设我们正在添加10,20,30,40:

第1步:空树,插入10:

10

步骤2:将20与10进行比较;更大,因此树变成:

10
  \
   20

步骤3:将30与10进行比较;更大,所以下移到节点20。         比较30和20;更大,因此树变成:

10
  \
   20
     \
      30

步骤4:将40与10进行比较;更大,所以下移到节点20。         比较40和20;更大,所以向下移动到30节点。         比较40和30;更大,因此树变成:

10
  \
   20
     \
      30
        \
         40

注意我们每次如何再获得一次比较 - 所以第一个元素进行0次比较,第二个元素进行0次比较,第三次采用2次等等 - 总结为n(n-1)。

当然,只有按顺序插入(小到大或从大到小)才会出现这种情况。按顺序插入恰好平衡树的顺序将会大大降低。

答案 1 :(得分:1)

在最坏的情况下,你的BST是一个列表,并且在空的末尾插入N个项目是O(n ^ 2)。