用于创建二叉搜索树的输入值

时间:2011-08-05 02:07:57

标签: c tree binary-search

在二叉搜索树上,如果我将输入设为“2,1,3,4,5”,那么树就像

              2
              /\
              1 3
                 \
                  4
                   \
                    5

但输入如“5,2,1,3,7,6,8”。

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

所以我的问题是,如何产生输入以便获得如上所述的平衡树结构。 (我不想使用AVL树。)。我们有技巧以正确的方式对数字进行排序或重新排列,并将它们作为输入生成。我正在寻找输入,以便树可以创建高达10的高度。

1 个答案:

答案 0 :(得分:4)

保证平衡树的一种非常简单的方法是对输入进行排序,然后递归插入值,如下所示:

  1. 插入整个数组的中间位置。
  2. 使用此过程以递归方式插入数组的左半部分和右半部分。
  3. 例如,在您删除5的值为1 - 8的情况下,您可以将值排序为

    1 2 3 5 6 7 8
    

    然后插入5,然后递归地将此过程应用于两半。在1 2 3的一半,您将插入2,然后递归插入1和3.这给出了排序

     5 2 1 3
    

    现在,你递归地处理另一半6 7 8,它插入7然后递归插入6和8.总的来说,这会产生排序

    5 2 1 3 7 6 8
    

    这正是您之前在帖子中提出的顺序。

    此过程在O(n lg n)时间内运行。我并不认为这是最优的,所以如果其他人想发布一个更好的答案,我很乐意看到它。