【问题标题】:Understanding Binary Search Tree construction了解二叉搜索树构造
【发布时间】:2013-06-19 20:35:10
【问题描述】:

我很难理解二叉搜索树是如何构建的。他们是否需要对初始数据进行排序才能找到最顶层的根?

【问题讨论】:

    标签: data-structures binary-search-tree


    【解决方案1】:

    二叉搜索树的形状取决于两件事:

    1. 元素的插入顺序,以及
    2. 树在插入过程中会执行哪些平衡操作(如果有)。

    如果您有一个没有任何重新平衡逻辑的纯二叉搜索树,那么插入元素的顺序将对树的形状产生很大影响。例如,取值 1、2、3、4、5、6、7。如果按 4、2、6、1、3、5、7 的顺序插入它们,您将得到这棵树:

            4
          /   \
         2     6
        / \   / \
       1   3 5   7
    

    这样做的原因是我们遍历了以下一系列树:

         4
    
         4
       /
      2
    
         4
       /   \
      2     6 
    
         4
       /   \
      2     6
     /
    1
    
         4
       /   \
      2     6
     / \
    1   3
    
         4
       /   \
      2     6
     / \   /
    1   3 5
    
         4
       /   \
      2     6
     / \   / \ 
    1   3 5   7
    

    另一方面,如果您按 1、2、3、4、5、6、7 的顺序插入值,则会得到以下树:

    1
     \
      2
       \
        3
         \
          4
           \
            5
             \
              6
               \
                7
    

    有趣的是,将元素按排序顺序插入 BST 是您可以为树做的最糟糕的事情之一,因为它使树成为线性结构。您最好选择要插入的元素的随机排列,或者(如果它们都事先知道的话)对它们进行排序并在排序后的序列上使用以下递归算法:

    • 如果没有元素,您就完成了。
    • 否则:
      • 将中位数插入 BST。
      • 递归地将前半部分元素插入 BST。
      • 递归地将元素的后半部分插入 BST。

    希望这会有所帮助!

    【讨论】:

    • "将中位数插入 BST。"所以,为了得到中间值,我必须先把我的线性数据排序,所以像 5,3,6,2,4,1 必须重新排序为 1,2,3,4,5 ,6 然后 4 将是根?
    • @GeorgeL- 我不确定我是否理解您的评论。你能澄清一下吗?
    • 对不起,没有意识到按回车提交评论。
    • @GeorgeL- 如果您想要一个最佳的 BST,您需要提前对数据进行排序,或者使用至少与排序数据一样多的算法。
    • @GeorgeL- 也就是说,BST 的根(除非 BST 使用平衡算法)始终是插入的第一个元素。
    猜你喜欢
    • 2016-03-02
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多