建造一个平衡的树

时间:2012-02-12 23:37:39

标签: tree binary-search-tree

给出以下排序整数:1 2 3 4 5 6 7 8.如何构建平衡搜索树?

如果有人能够解释而不提供代码示例,我将非常感激。

这不是家庭作业。我正在修改考试。

如果将上面的值放入平衡树中,树是否应该与下面的类似?

        5
      4   6
    3      7
   2        8
 1

2 个答案:

答案 0 :(得分:4)

最简单的方法可能如下:

  • 查找列表的平均值。
  • 对左边包含较小数字的平均值进行分区,右​​边包含较大的数字。
  • 继续以递归方式从每个分区构建一个树。

由于您的整数列表已经排序,您只需在中间选择值即可找到均值(并且在分区时无需移动平均值周围的任何值)。只需将列表分为两部分即可获得子树。

最终树取决于您选择哪个节点作为中间。这是一个例子:

    4
 2     6
1 3   5 7 
          8

答案 1 :(得分:0)

您可以考虑自下而上构建。

你将有一个根。如果树中只有一个元素,则这是根。根中的每个元素都将引用树中的另一个两个节点(二叉树)。一个元素比一个大于自身的元素,另一个元素比一个小于它自身的元素。

因此,如果您的树只有第一个并且您要插入数字两个,则它将作为叶子插入,并且根中的“大于”的引用将指向节点2.

当您插入值3时,您必须将其插入节点2的“大于”的引用中。但是等等,这将使树不平衡,因此您必须更正此值。您必须将节点2设置为根并指向“小于”中的节点1和“大于”引用中的数字3。

希望这能让你更好地理解它。

最终结果取决于您插入元素的顺序。但是,如果你插入像1,2,3,4,5 ...树应该是这样的:

  2
1   3

然后

    3
  2   4
1

之后

    3
  2   4
1       5

等等。插入这样的节点时的例子并不是那么好,但如果你按顺序思考:4,2,6,1,3,5那么结果应该是这样的:

       4
  2        6
1   3    5