首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >何时(最大)堆可以是一个BST?

何时(最大)堆可以是一个BST?
EN

Stack Overflow用户
提问于 2021-06-19 13:57:41
回答 2查看 216关注 0票数 0

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

  1. A堆永远不可能是BST
  2. 堆总是BST
  3. 堆如果其中只有一个节点(根)
  4. A堆可以是BST当且仅当它有最多2个节点

<代码>g29

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

EN

回答 2

Stack Overflow用户

发布于 2021-06-19 13:57:41

一开始:

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

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

我想到的堆

  1. 只有一个值,例如8。因为它没有子树,所以这棵树仅仅是由根组成的。这棵树是完整的,根的值比它的子树的值大,所以它是一个堆。这棵树也是一个没有孩子的BST树。所以有一个堆,它也是BST.

  1. ,这当然是假的。设最大堆为:

当然,这是一个最大的堆,但不是BST,因为6位于8的右边。

  1. 我认为这是正确的,正如我在(1)

中所解释的那样

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

如果我们有0节点,它就会保持。

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

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

如果有什么不正确的地方,请指出。谢谢!)

票数 0
EN

Stack Overflow用户

发布于 2021-06-20 13:20:20

这太棘手了!让我们逐一探讨所有的选择。

从你问题的选项来看:

堆永远不可能是BST

不对。因为有一两个元素的堆也可以是有效的BST。(见第三选项中的示例)

堆总是BST。

不对。从您的例子中可以清楚地看到,堆有时不能保存BST的属性,特别是Max-Heap。

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

不对。因为一棵有两个孩子的树也能拥有BST的属性。

例子-

代码语言:javascript
运行
复制
              3
               \ 
                5 

上面的节点结构是BST,同时也是一个Min.

堆可以是BST当且仅当它有最多2个节点时。

你猜怎么着!也错了!因为单个节点可以是有效的BST以及Max/Min。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68047468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档