【问题标题】:Heap height includes root level堆高包括根级别
【发布时间】:2021-11-02 11:26:30
【问题描述】:

堆根是否包含在堆高计数中?

堆高应该代表堆结构的层数。 根据公式

  • MIN 元素数 = 2 次幂 (h-1),
  • 最大元素数 = 2 次幂 h -1

根级别计入堆高。虽然,我发现了一些不是这种情况的描述。 -Q= 如果有任何 不应该包含 root 的规则,我很感兴趣 计算堆高度

另外,我已经找到了答案,在堆中,如果两个子元素具有相同的值,并且应该交换父元素,则可以安全地交换它(没有偏好左/右子元素)。有人可以证实这一点,所以我可以完全排除任何疑问。

更新: 根据height的定义,根的高度为0,则正确的最小和最大元素数公式为:

  • MIN=2 次幂
  • MAX=元素数 = 2 次方 (h+1) -1。

根据树高的官方定义高度计数中不包括根级别。感谢 trincot 帮助解决这个疑问。 虽然这是解决堆高度的正确方法,但网上可能有一些资源包括高度计数的根级别(官方定义是错误的)。

【问题讨论】:

    标签: heap


    【解决方案1】:

    由于堆数据结构是一棵具有特定属性的树(具体来说,它是一个有根的、完全的、二叉树,其值服从堆属性),堆的高度的定义与有根树高度的定义相同。

    维基百科定义它as follows:

    节点的高度是从该节点到叶子的最长向下路径的长度。根的高度就是树的高度。 [...] 一棵只有一个节点的树(因此既有根又有叶)的深度和高度为零。按照惯例,一棵空树(没有节点的树,如果允许的话)的高度为 -1。

    根据这个定义,一棵树的高度比一棵树中的层数小一。

    几乎总是使用这个定义。但在极少数情况下,您会发现高度是层数的定义。例如here。但这是一个不太流行的定义。

    以下是为更流行的定义辩护的论据:

    想象这棵树是一组拼凑在一起的绳索,每根绳索都有相同的尺寸(例如 10 厘米),末端连接在一起的地方就是顶点。现在拿起“根”并将其高高举起。绳索都垂直悬挂,形成一个垂直的柱子。现在测量从根部到这个悬挂结构最低点的距离:这就是我们所说的那个结构的高度。它是形成最长路径的小连接绳索的长度之和。这与树高的流行定义(如维基百科上的)相对应。它取决于最长路径的 edges 的数量,而不是该路径上的 nodes 的数量。


    关于你的另一个问题:是的,如果父母应该筛选堆,并且两个孩子都具有相同的值,那么交换它是安全的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      相关资源
      最近更新 更多