Algorithm 锯齿型二叉树

Algorithm 锯齿型二叉树,algorithm,data-structures,binary-search-tree,Algorithm,Data Structures,Binary Search Tree,如何安排一个由n个不同数字组成的序列,以便在二元搜索树中一次插入一个数字,它将生成一个高度为n-1的树,并遵循锯齿形模式,如左、右、左、右 我只需要确定序列必须具有什么属性,而不是实际构建生成序列的算法。好吧,让我们来做一个例子。我们插入到树中的第一个值可以是任何值,因此我将选择0 0 现在,我们需要一些东西,让我们朝着正确的方向迈出一步。这意味着我需要大于0的值,所以我选择137 0 \ 137 现在,我需要一个137岁的孩子。这意味着它必须在0和137之间-任何较小的都会进入

如何安排一个由n个不同数字组成的序列,以便在二元搜索树中一次插入一个数字,它将生成一个高度为n-1的树,并遵循锯齿形模式,如左、右、左、右


我只需要确定序列必须具有什么属性,而不是实际构建生成序列的算法。

好吧,让我们来做一个例子。我们插入到树中的第一个值可以是任何值,因此我将选择0

 0
现在,我们需要一些东西,让我们朝着正确的方向迈出一步。这意味着我需要大于0的值,所以我选择137

 0
  \
  137
现在,我需要一个137岁的孩子。这意味着它必须在0和137之间-任何较小的都会进入0的左侧,任何较大的都会进入137的右侧。所以,我会选择这个范围内的一些东西,比如说,42:

  0
   \
   137
   /
  42
现在,我需要一些能成为42岁孩子的东西。这意味着它必须在42到137之间。任何较小的值都将位于42的左侧(或0的左侧,同样不正常)或137的右侧(也不正常)。那么让我们从42到137之间选择一些东西-比如说,98:

  0
   \
   137
   /
  42
   \
   98
您可能会注意到一种模式:在每个点,我们插入的值必须介于最后两个插入的值之间。你明白这是为什么吗?基于此,你能想出一种方法来对值0,1,2,…,n-1进行排序,从而得到一个Z字形的图案吗


希望这有帮助

如果每个新值在大于前一个值且也小于前一个值(如果存在)或小于前一个值且也大于前一个值(如果存在)之间交替出现,您不知道吗?