Data structures 为什么这个二叉树不是堆?

Data structures 为什么这个二叉树不是堆?,data-structures,heap,Data Structures,Heap,我一直在自学成堆的考试,遇到了以下问题: “给出以下二叉树不是堆的两个不同原因” 我知道其中一个原因是因为堆的子级必须小于或等于其父级的值,所以81违反了此规则,即81>77,但我不确定另一个答案 有人能澄清一下吗?11应该是46的左孩子,而不是右孩子 提到二进制堆应该是a,这意味着“每个级别(可能除了最后一个级别)都已完全填充,所有节点都尽可能地位于左侧”,如果11是现在的位置,则显然不是这样 这一优势的原因很容易理解——给定堆的大小,您可以快速确定底层最后一个节点的位置,这对于插入和删除是必

我一直在自学成堆的考试,遇到了以下问题:

“给出以下二叉树不是堆的两个不同原因”

我知道其中一个原因是因为堆的子级必须小于或等于其父级的值,所以
81
违反了此规则,即
81>77
,但我不确定另一个答案


有人能澄清一下吗?

11
应该是
46
的左孩子,而不是右孩子

提到二进制堆应该是a,这意味着“每个级别(可能除了最后一个级别)都已完全填充,所有节点都尽可能地位于左侧”,如果
11
是现在的位置,则显然不是这样

这一优势的原因很容易理解——给定堆的大小,您可以快速确定底层最后一个节点的位置,这对于插入和删除是必需的。如果我们使用的是数组表示,那么它就像堆大小为-1的
元素是最后一个元素一样简单。对于基于指针的表示,我们可以很容易地确定是向左还是向右到达最后一个元素


如果堆不是完整的二叉树,可能还有其他方法可以获得相同的性能,但它们可能会增加复杂性。

这不是堆,因为它不符合heap属性

  • 在最小堆中,每个节点的值都小于或等于其子节点的值
  • 在最大堆中,每个节点的值都大于或等于其子节点的值
它显然不是一个最小堆,因为根节点91比它的任何一个子节点都大。 它显然不是一个最大堆,因为节点77比它右边的子节点81小


而且,正如@Dukeling在他的回答中指出的,它不符合形状属性。

可能是
11
应该是
46
的左子级,而不是右子级,但我不确定这是否重要。
“为什么这个二叉树不是堆?”
“堆排序是如何工作的?”
-你真的应该把这两个问题分成两个独立的问题,尽管后者似乎太宽泛/不清楚(很可能会以结束而告终)。我的原始标题已编辑,并引出该问题,我现在将编辑该部分。抱歉。如果您想要一个二进制堆解释和实现的示例(我试着对其进行了很好的注释),请参阅
    91
   /  \
  77  46
 /  \   \
68  81   11