如何在线性时间内将二元搜索树重建为完美平衡? 我想我会轮换找到中位数,但我不确定它是不是很好。
感谢任何想法。
答案 0 :(得分:2)
至少,您可以分两步完成:
使用按顺序遍历从树中提取已排序的数组。
构造一个近乎完美的二叉树。例如,通过仅用h = log 2 n来限制高度,其中n是元素的数量。如果对于某个整数k,n不等于2 k -1,则只能获得完美树的一部分,但高度仍然是最小的。
这是用于构造值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
每个步骤都可以线性时间执行。