为什么以(反向)顺序添加节点会导致搜索效率低下?

时间:2012-05-16 12:28:47

标签: data-structures binary-search-tree

我正在准备考试,我偶然发现了以下问题:

  

绘制二进制搜索树,如果要按以下顺序添加数据,将会产生结果:

     

10,9,8,7,6,5,4,3

     

为什么树不适合高效搜索?

我的回答:

我想在创建BST时,我们以值10作为根节点开始,然后在第一级添加9作为左子树值。然后是8到9的左子树,依此类推。我不知道为什么这会使搜索效率低下。有什么想法吗?

3 个答案:

答案 0 :(得分:8)

由于值按降序排列,它们会在每个级别添加到左侧,实际上会留下一个链接列表,它需要O(N)进行搜索,而不是BST的首选O(logN)。

图:

              10
             /
            9
           /
          8
         /
        7
       /
      6
     /
    5
   /
  4
 /
3

答案 1 :(得分:0)

这会创建一个链表,因为它只是一系列节点;这是一棵非常不平衡的树。

你应该查找red-black trees。它们具有相同的时间复杂性,但它会不断地在节点周围移动,因此它总是形成三角形。这将使树保持平衡。

答案 2 :(得分:0)

这是低效的,因为节点将始终添加到先前节点的左子树。进行搜索检查列表中的每个节点,直到它找到结果,即使答案总是在左边,因此实际上使得它需要更多的计算,而不仅仅是通过循环搜索列表。