关于堆的澄清 - 它们是否必须被填充为有效堆?

时间:2013-10-08 18:03:58

标签: heap

阿卡

     1
2          3

是有效的堆吗?

尽管

    1
2     

不是,因为树没有填满所有级别?

或者堆的结构属性是否仅指定堆刚刚填充,以便在级别顺序中元素之间没有“间隙”。这意味着第二个堆也是一个有效的堆?

或者堆的结构属性是否只需要堆已满,即每个父有0或2个孩子?

所以

           1
       2      3  
   4     7   9   99

是一个有效的堆,就像

一样
           1
       2      3  
   4     7   

但不是

          1
       2      3  
   4     7   9   

1 个答案:

答案 0 :(得分:1)

这主要是关于术语的问题。但是,几乎总是将堆定义为有根树,其中:

  1. 对于除root之外的每个节点,其密钥不小于其父
  2. 的密钥
  3. 每个节点都有0个,1个或2个子节点和
  4. 树几乎是一个完整的二叉树,但可能是最后一层。最后一级应该从左到右填充。
  5. 所以,这些都是有效的堆:

            1                5
         2     3          9     8
       3  6   9         11
    

    而这些不是:

            1                5
         2                9     8
       3                   13  9 10