Arrays 最小高度BST

Arrays 最小高度BST,arrays,sorting,binary-search-tree,tree-balancing,Arrays,Sorting,Binary Search Tree,Tree Balancing,我试图解决以下问题:“给定一个具有唯一整数元素的排序(递增顺序)数组,编写一个算法来创建高度最小的BST。” 给定的答案将根节点作为数组的中间节点。虽然这样做对我来说很直观,但我试图严格地证明,让根节点成为数组的中间总是最好的 书中给出的理由是:“要创建高度最小的树,我们需要尽可能将左子树中的节点数与右子树中的节点数匹配。这意味着我们希望根节点位于数组的中间,因为这意味着一半元素将小于根,一半元素将大于根。” 我想问: 为什么任何最小高度的树都是左子树中的节点数尽可能与右子树中的节点数相等的树?

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

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

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

我想问:

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

  • 一棵最小高度的树和一棵平衡的树一样吗?从前面的问题开始,这就是我得到的印象,()但我很困惑,因为这本书特别提到“最小高度的BST”而从来没有“平衡BST”

  • 谢谢

    来源:破解编码采访

  • 我喜欢这样想,如果你用树的旋转来平衡一棵树(之字形和之字形旋转)您最终将达到这样一种状态,即左子树和右子树的最大高度相差1。平衡树的左、右子树的数目并不总是相同的;但是,如果具有该不变量(每侧子树的数目相同),可以到达使用树旋转进行平衡的树)

  • 平衡是任意定义的。AVL树定义它的方式是,树的子树没有一个子树的高度相差超过一个。其他树以不同的方式定义平衡,因此它们的区别不同。它们本质上是相关的,但并不完全相同。也就是说,最小高度的树总是be在任何定义下都是平衡的,因为平衡的存在是为了保持BST的O(log(n))查找时间

  • 如果我遗漏了什么或说了什么错话,请随时编辑/更正我。 希望这有帮助

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

    可能存在这样一种情况,即在最小高度树(当然是平衡的)中,左侧和右侧可以有不同数量的节点计数。BST最坏情况下的遍历是O(n),如果排序,则在最小高度树中,最坏情况下的复杂度是O(logn)

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

    一棵最小高度的树和一棵平衡的树是一样的吗?从前面的问题开始,这就是我得到的印象,(想象一棵平衡的树),但我很困惑,因为这本书特别指出“最小高度的BST”而从来没有“平衡的BST”

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

        *
       / \
      *   *
     /
    *