Tree 堆何时成为完整的二叉树?

Tree 堆何时成为完整的二叉树?,tree,heap,binary-tree,binary-heap,Tree,Heap,Binary Tree,Binary Heap,我知道堆总是完全的二叉树。但我想知道堆什么时候是完整的二叉树?如堆必须在什么条件下始终是一个完整的二叉树?,以说明堆条件为何不重要,考虑通过简单地分配每个节点的高度,很容易对满足堆条件的任何二叉树给出一个标记。(如果需要唯一的标签,可以对树进行拓扑排序,然后从根开始计数。) 因此,完整性和完整性也是堆的正交概念(寻找完整、完整、两者都有且两者都没有的树的示例) 但是,堆实现通常选择确保堆条件,以确保生成的二叉树是完整的。实现普通二进制堆的标准方法是使用数组,然后用隐式二进制堆从左到右填充它(这是

我知道堆总是完全的二叉树。但我想知道堆什么时候是完整的二叉树?如堆必须在什么条件下始终是一个完整的二叉树?

,以说明堆条件为何不重要,考虑通过简单地分配每个节点的高度,很容易对满足堆条件的任何二叉树给出一个标记。(如果需要唯一的标签,可以对树进行拓扑排序,然后从根开始计数。)

因此,完整性和完整性也是堆的正交概念(寻找完整、完整、两者都有且两者都没有的树的示例)

但是,堆实现通常选择确保堆条件,以确保生成的二叉树是完整的。实现普通二进制堆的标准方法是使用数组,然后用隐式二进制堆从左到右填充它(这是通常实现heapsort的方法)

如果这就是您所指的堆类型,那么约束会明显收紧,因为您总是从左到右一次填充一层树。很明显,为什么这样一个树是完整的(除了最后一个层次外,所有层次都是完全填充的)

还应该很容易看出,它总是在满和不满之间交替:

  • 如果它只有根,它就是满的
  • 如果将节点添加到完整树,则其父节点必然只有一个(左)子节点,因此该树将不再完整
  • 如果您的树不再满,下一次插入将使其再次满,因为它将作为在上一步中为其提供左子级的父级的(右)子级插入