订购二叉搜索树

时间:2013-10-17 15:24:24

标签: binary-tree binary-search-tree

当试图将一组数字排序到二叉搜索树中时,是否总有一种方法可以对它们进行排序,这样树的高度最短,换句话说效率最高?

1 个答案:

答案 0 :(得分:1)

通过将一个元素作为树的根并在其周围排列所有其他数字,可以将一组数字转换为BST。我可以看到以下情况与这一理论相矛盾:

挑选一个根导致高度为h的树,左子树比右子树高“。 选择另一个根导致另一个树,也是高度h,右侧子树比左子树“更高”。

另一个简单的例子涉及交换两个不直接相关的连续元素的插入顺序,因此不会影响彼此在树中的位置。

反例反驳。

设置S = {0, 1, 2, 3}。 按以下顺序将元素插入二叉搜索树:1, 0, 2, 3

  1
 / \
0   2
     \
      3

按以下顺序将元素插入二叉搜索树:1, 2, 0, 3

  1
 / \
0   2
     \
      3

因为这两棵树具有不同的插入顺序,但两者都具有最小高度,所以只有一个插入顺序提供最小高度的二叉搜索树的声明是错误的。

如果树上元素的实际排序是您所关注的,请按以下顺序插入集合的元素:2, 1, 0, 3

    2
   / \
  1   3
 /
0

同样,这棵树的高度与之前的树相同,因此表明树中不同的项目排序也可以生成最小高度的树。


(旁边)

您始终可以通过首先对集合的元素进行排序,然后不断细分已排序的集合以确保平衡并完成每行的填充来构建最小高度树。

  • 取集合的中间元素。在偶数个元素的情况下,取两个“中间”元素中的较大者。这将成为树的根。
  • 取中位数以下的所有元素。这将成为根的左子树。
  • 取中位数以上的所有元素。这将成为根的正确子树。
  • 从这些集合中递归创建左右子树。

这应该确保你有一个完整的二叉树,它总是最小的高度。