什么是近乎完整的二叉树?

时间:2020-01-29 17:56:54

标签: algorithm data-structures heap

我已经在线阅读了许多有关“堆”的定义,并且还阅读了CLRS中的定义。在线上的大多数定义似乎都说堆是完整的二叉树。但是,CLRS使用以下句子开始堆章节:

(二进制)堆数据结构是我们可以查看的数组对象 作为几乎完整的二叉树...

我不确定为什么,但是CLRS称堆“几乎完成”确实使我感到困扰,而我读过的几乎所有其他“堆”定义都称堆为“完成”。

这引出了以下问题:是否有可能不是完整的二叉树的堆?

2 个答案:

答案 0 :(得分:3)

complete到底是什么意思?人们有不同的意见。在堆的上下文中,complete二叉树应表示树的最后一级具有最大数量的节点。

任何在最后一级没有最大叶子数的堆都不是completenearly complete

例如,具有7个元素的堆将是complete二叉树。但是包含4、5或6个元素的堆不会完全填充其最后一个级别,即nearly complete

具有Nearly complete二阶深度为三的二叉树(假定根节点的深度为1)的堆如下所示:

enter image description here

答案 1 :(得分:3)

您绝对对表达式“几乎完成”感到困扰。根据最常用的术语,堆是一个完整的二叉树:

  • 完整的二叉树:除了最后一个级别以外的所有树都被完全占用,并且最后一个叶子 级别显示在该级别的左侧。

  • 完美的二叉树:完整的二叉树,其中最后一层也被完全占用。

  • 完整的二叉树:一棵二叉树,其中所有节点都没有一个子节点。有时,该术语用于表示完美的二叉树,这增加了混乱。

enter image description here

完美的二叉树也是完整的和完整的二叉树,但是完整的二叉树可能是也可能不是完整的二叉树。

但是Binary tree上的Wikipedia文章警告:

有些作者使用术语 complete 来代替 perfect 二叉树[...],在这种情况下,他们称这种树为树(可能没有填充到最后一级)几乎完整的二叉树几乎完整的二叉树

显然,您所引用文字的作者属于该类别。