为什么最坏的情况是将O项插入空二进制搜索树n ^ 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)。