完美平衡,线性时间

时间:2014-03-18 20:42:38

标签: algorithm

如何在线性时间内将二元搜索树重建为完美平衡? 我想我会轮换找到中位数,但我不确定它是不是很好。

感谢任何想法。

1 个答案:

答案 0 :(得分:2)

至少,您可以分两步完成:

  1. 使用按顺序遍历从树中提取已排序的数组。

  2. 构造一个近乎完美的二叉树。例如,通过仅用h = log 2 n来限制高度,其中n是元素的数量。如果对于某个整数k,n不等于2 k -1,则只能获得完美树的一部分,但高度仍然是最小的。

  3. 这是用于构造值1,2,3,... 10的树的说明图像:

               8
        4            10
     2     6        9
    1 3   5 7
    

    或者,在步骤2中,您可以将数组的中间元素设置为root,将剩余的元素除以两个大小相等的部分,然后递归执行。一个例子:

                5
         2              8
     1       3       7      10
           4       6       9
    

    每个步骤都可以线性时间执行。