Data structures 理解二叉搜索树的构造

Data structures 理解二叉搜索树的构造,data-structures,binary-search-tree,Data Structures,Binary Search Tree,我很难理解二进制搜索树是如何构建的。它们是否需要对初始数据进行排序才能找到最顶端的根?二叉搜索树的形状取决于两个因素: 插入元素的顺序,以及 树在插入期间执行的平衡操作(如果有) 如果您有一个没有再平衡逻辑的纯二叉搜索树,那么元素的插入顺序将对树的形状产生很大的影响。例如,取值1、2、3、4、5、6、7。如果按顺序4、2、6、1、3、5、7插入它们,将得到以下树: 4 / \ 2 6 / \ / \ 1 3 5 7 1

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

二叉搜索树的形状取决于两个因素:

  • 插入元素的顺序,以及
  • 树在插入期间执行的平衡操作(如果有)
  • 如果您有一个没有再平衡逻辑的纯二叉搜索树,那么元素的插入顺序将对树的形状产生很大的影响。例如,取值1、2、3、4、5、6、7。如果按顺序4、2、6、1、3、5、7插入它们,将得到以下树:

            4
          /   \
         2     6
        / \   / \
       1   3 5   7
    
    1
     \
      2
       \
        3
         \
          4
           \
            5
             \
              6
               \
                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插入值,则得到以下树:

            4
          /   \
         2     6
        / \   / \
       1   3 5   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-我不确定我是否理解你的评论。您能澄清一下吗?很抱歉,没有意识到按enter键会提交评论。@GeorgeL-如果您想要一个最佳的BST,您需要提前对数据进行排序,或者使用一种算法,该算法的工作量至少与对数据进行排序相同。@GeorgeL-也就是说,BST的根(除非BST使用平衡算法)始终是插入的第一个元素。