【问题标题】:When can a (max) heap be a BST?(最大)堆什么时候可以成为 BST?
【发布时间】:2021-09-03 22:01:35
【问题描述】:

干杯,假设我们有一个不允许重复元素的 MAX 堆。这个堆有可能成为 BST 吗?在下面选择正确的答案:

  1. 堆永远不可能是 BST
  2. 堆始终是 BST
  3. 如果堆内只有一个节点(根),则堆可以是 BST
  4. 一个堆可以是 BST 当且仅当它有多达 2 个节点

哪一个是合适的答案?我会选择(3)和(4),以及我对所有我给出的解释作为答案。谢谢!

【问题讨论】:

    标签: binary-tree binary-search-tree heap


    【解决方案1】:

    这很棘手!让我们一一研究所有选项。

    从您问题的选项中:

    堆永远不可能是 BST

    错了。 因为具有一两个元素的堆也可以是有效的 BST。 (参见第 3 个选项的示例)

    堆始终是 BST

    错了。从您的示例中可以清楚地看出,堆有时不能拥有 BST 的属性,特别是 Max-Heap。

    如果堆内只有一个节点(根),则堆可以是 BST

    错了。因为一棵有两个孩子的树也可以拥有 BST 的财产。

    例子-

                  3
                   \ 
                    5 
    

    上面的node结构是BST,也是Min-Heap。

    一个堆可以是 BST 当且仅当它有多达 2 个节点

    猜猜看!!也错了!。因为单个节点既可以是有效的 BST,也可以是 Max/Min-Heap。

    【讨论】:

      【解决方案2】:

      开始:

      (最大)堆是一棵完全二叉树,其中每个节点的值都大于或等于其子节点的值。

      BST是一棵二叉树,其中每个节点最多有2个孩子,每个节点的值都大于其左子树的所有值,小于其右子树的所有值。

      1. 我想到的堆只有一个值,例如8. 由于它没有孩子,这棵树只有它的根。这棵树是完整的,并且根的值大于其子节点的值,因此它是一个堆。这棵树也是没有孩子的 BST。所以有一个堆也是一个 BST。

      2. 这当然是错误的。设最大堆为:

      当然这是一个最大堆,但不是 BST,因为 6 放在 8 的右侧。

      1. 我认为这是正确的,正如我在 (1) 中所解释的那样

      2. 最多两个节点意味着我们可以有 0、1 或 2 个节点。

      如果我们有 0 个节点,它成立。

      如果我们有 1 个节点,它也成立,我们证明了这一点。

      如果我们有 2 个节点,它也成立。让一个具有 2 个节点的最大堆。要使其成为最大堆,它必须是一棵完整的树,因此根据定义,第二个节点应放置在第一个节点(根节点)的左侧。根据最大堆的定义,第二个节点还包含小于第一个节点(根)的值。这也是具有 2 个节点的 BST 的树。所以是正确的。

      (如有不妥请指出,谢谢!)

      【讨论】:

        猜你喜欢
        • 2019-12-23
        • 2011-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        相关资源
        最近更新 更多