最小高度的BST

时间:2015-05-18 05:49:36

标签: arrays sorting binary-search-tree tree-balancing

我正在尝试解决以下问题:“给定具有唯一整数元素的排序(递增顺序)数组,编写算法以创建具有最小高度的BST。”

给定的答案将根节点作为数组的中间位置。虽然这样做对我来说很直观,但我试图严格证明,最好将根节点放在数组的中间位置。

本书中给出的理由是:“要创建一个最小高度的树,我们需要尽可能地将左子树中的节点数与右子树中的节点数相匹配。这意味着我们希望根节点成为数组的中间部分,因为这意味着一半的元素将小于根,一半将更大。“

我想问:

  1. 为什么任何最小高度的树都是左子树中的节点数尽可能与右子树中的节点数相等的树? (或者,您是否有任何其他方法可以证明最好将根节点作为数组的中间位置?)

  2. 高度最小的树是否与平衡的树相同?从之前关于SO的问题来看,这就是我得到的印象,(Visualizing a balanced tree)但是我感到很困惑,因为这本书明确指出“BST的高度最小”而且从不“平衡BST”。

  3. 感谢。

    来源:破解编码面试

2 个答案:

答案 0 :(得分:0)

  1. 我喜欢考虑它的方式,如果你使用树旋转(zig-zig和zig-zag旋转)来平衡树,你最终会达到左右子树相差最多的状态高度一。平衡的树在右侧和左侧必须具有相同数量的子项并非总是如此;但是,如果你有那个不变量(每边的孩子数量相同),你就可以到达一棵用树轮转平衡的树了。

  2. 余额是任意定义的。 AVL树以这样的方式定义它,即树的子树没有高度​​相差不止一个的子节点。其他树木以不同的方式定义平衡,因此它们不同。它们本质上是相关的,但并不完全相同。话虽这么说,一个最小高度的树将始终在任何定义下平衡,因为存在平衡以维持BST的O(log(n))查找时间。

  3. 如果我遗漏了任何内容或说错了,请随时编辑/更正我。 希望这有帮助

答案 1 :(得分:0)

  

为什么任何最小高度的树都是节点数的树   在左子树中尽可能与节点数相等   正确的子树?

可能存在这样的情况:在平衡的最小高度树中,左侧和右侧的节点数可以不同。 BST最坏情况遍历是O(n),如果它被排序,并且在最小高度树中,最坏情况的复杂度是O(log n)。

    *
   / \
  *   *
 /
*

在这里你可以清楚地看到左节点数和右节点不相等,尽管它是一个最小高度树。

  

高度最小的树是否与平衡的树相同?从之前关于SO的问题来看,这是我得到的印象,(可视化平衡的树),但我感到很困惑,因为这本书特别指出了BST的最小高度"从来没有"平衡BST"。

最小高度树是平衡的,有关详细信息,您可以查看AVL树,也称为高度平衡树。在使BST成为高度平衡树时,您必须执行旋转(LR,RR,LL,RL)。