在二叉搜索树上,如果我将输入设为“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的高度。
答案 0 :(得分:4)
保证平衡树的一种非常简单的方法是对输入进行排序,然后递归插入值,如下所示:
例如,在您删除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)时间内运行。我并不认为这是最优的,所以如果其他人想发布一个更好的答案,我很乐意看到它。