“完整的二叉树”,“严格的二叉树”,“全二叉树”之间的区别?

我对下面的树的术语感到困惑,我一直在研究这棵树,而我无法区分这些树:

a)完整的二叉树

b)严格的二叉树

c)完整的二叉树

请帮我区分这些树木。 数据结构中何时何地使用这些树?

维基百科产生

完整的二叉树(有时是二叉树或二叉树或严格二叉树)是一棵树,树叶中的每个节点都有两个孩子。

所以你没有节点只有一个孩子。 看起来和严格的二叉树一样。

这是一个完整/严格的二叉树的形象,从谷歌:

在这里输入图像说明

一个完整的二叉树是一个二叉树,其中除了最后一个以外的每个等级都被完全填充,并且所有的节点尽可能地离开。

这似乎意味着一棵平衡的树。

这里是一个完整的二叉树的图像,从谷歌,图像的全树部分是奖金。

在这里输入图像说明

完善:

x / \ / \ xx / \ / \ xxxx / \ / \ / \ / \ xxxxxxxx 

完成:

  x / \ / \ xx / \ / \ xxxx / \ / xxx 

严格:

  x / \ / \ xx / \ xx / \ xx 

严格和完整的二叉树是有区别的。

1)完全二叉树:包含(2 ^ h)-1个元素的高度为h的二叉树被称为完整二叉树 。 (参考资料:Pg 427, C ++中的数据结构,algorithm和应用 [大学出版社],第二版Sartaj Sahni)。

换句话说

在一个完整的二叉树中,每个节点只有0或2个子节点,并且所有的叶子节点都在同一个级别上。

例如:以下是一个完整的二叉树:

  18 / \ 15 30 / \ / \ 40 50 100 40 

2)严格的二叉树:每个节点只有0或2个孩子。

例如:以下是一个严格的二叉树:

  18 / \ 15 30 / \ 40 50 

我认为在完整的二叉树的定义中没有混淆,但是为了完整性,我想告诉一个完整的二叉树是什么。

3)完成二叉树二叉树是完整的二叉树,如果所有级别都完全填满,除了可能最后一级和最后一级尽可能所有的键。

例如:以下是一个完整的二叉树:

  18 / \ 15 30 / \ / \ 40 50 100 40 / \ / 8 7 9 

注意:以下也是一个完整的二叉树:

  18 / \ 15 30 / \ / \ 40 50 100 40 

免责声明 – 一些定义的主要来源是维基百科,任何改善我的答案的build议是受欢迎的。

虽然这篇文章有一个可以接受的答案,而且是一个很好的答案,但我仍然困惑不解,希望对这些术语之间的差异作出更多的澄清。

(1) 完整的二叉树 – 完整的二叉树是一棵二叉树,其中树叶以外的每个节点都有两个孩子。这也被称为严格二叉树

在这里输入图像说明在这里输入图像说明

以上两者是完全或严格二叉树的例子。

(2) 完整的二叉树 –现在完整的二叉树的定义是非常模糊的,它表示: – 一个完整的二叉树是一个二叉树,其中除了最后一个以外的每个层次被完全填充,并且所有节点都是尽可能地离开。 它可以有1到2小时的节点,尽可能地离开最后一级h

注意斜体的行。

含糊之处在于斜体字,“可能除了最后一个”,这意味着最后一层也可能被完全填满,即这个例外不一定总是被满足。 如果exception不成立,那么它就像我发布的第二个图像,也可以称为完美的二叉树 。 所以,一棵完美的二叉树也是完整而完整的,但反过来也是如此,这将通过我需要陈述的另一个定义来清楚:

几乎完整的二叉树当完全二叉树的定义中的exception存在时,它被称为几乎完整的二叉树或几乎完整的二叉树。 它只是一种完整的二叉树本身,但需要单独的定义来使其更明确。

所以一个几乎完整的二叉树看起来就像这样,你可以在图像中看到尽可能多的节点,所以它更像是完整的二叉树的一个子集,更严格地说,每个几乎完整的二叉树是一个完整的二叉树树,但不反之亦然。 :

在这里输入图像说明

从上面的结论回答,这是完整/严格,完整和完美的二叉树之间的确切区别

  1. 全/严格二叉树 : – 除叶节点以外的每个节点都有两个子节点

  2. 完整的二叉树 : – 除最后一级之外的每个级别都完全填充,所有节点都保持正确。

  3. 完美的二叉树 : – 除叶节点以外的每个节点都有两个孩子,每个级别(最后一级)都被完全填充。

考虑一个二叉树,其节点以树状方式绘制。 现在开始从上到下和从左到右编号节点。 完整的树具有以下属性:

如果n有孩子,那么编号小于n的所有节点都有两个孩子。

如果n有一个孩子,它必须是左边的孩子,小于n的所有节点都有两个孩子。 另外,没有大于n的节点有孩子。

如果n没有孩子,那么没有数量大于n的节点有孩子。

一个完整的二叉树可以用来表示一个堆。 它可以很容易地表示在连续的内存中,没有间隙(也就是说,除了最后可能存在的空间外,所有数组元素都被使用)。

完整的二叉树是一个完整的二叉树,但是反向是不可能的,如果二叉树的深度是n, (2 ^ n-1)。 二进制树中没有必要有两个孩子,但在完整的二进制文件中,每个节点都没有或两个孩子。

从基础开始,了解二叉树本身以了解二叉树的不同types是非常重要的。

树是二叉树当且仅当:

– 它有一个根节点,它可能没有任何子节点(0个子节点,NULL树)

-Root节点可能有1或2个子节点。 每个这样的节点都形成了本身的树

– 子节点的数量可以是0,1,2 …….不超过2

– 从根到每一个节点都有独特的path

例如:

  X / \ XX / \ XX 

来到您所查询的术语:

二叉树是一个完整的二叉树(高度为h,我们将根节点设为0)当且仅当:

等级0到h-1表示高度为h-1的完整二叉树

– h-1级中的一个或多个节点可能有0个或1个子节点

如果j,k是h-1级中的节点,那么当且仅当j在k的左边时,j具有比k更多的子节点,即,最后一级(h)可以丢失叶节点,但是存在的必须被转移到左边

例如:

  X / \ / \ / \ XX / \ / \ XXXX / \ / \ / \ / \ XXXXXXXX 

二叉树是严格二叉树当且仅当:

每个节点只有两个子节点或没有节点

例如:

  X / \ XX / \ XX / \ / \ XXXX 

二叉树是一个完整的二叉树当且仅当:

每个非叶子节点恰好有两个子节点

所有的叶子节点都在同一级别

例如:

  X / \ / \ / \ XX / \ / \ XXXX / \ / \ / \ / \ XXXXXXXX / \ / \ / \ / \ / \ / \ / \ / \ XXXXXXXXXXXXXXXX 

你也应该知道一个完美的二叉树是什么?

二叉树是一个完美的二叉树,当且仅当:

– 是一个完整的二叉树

– 所有的叶节点都在同一级别

例如:

  X / \ / \ / \ XX / \ / \ XXXX / \ / \ / \ / \ XXXXXXXX / \ / \ / \ / \ / \ / \ / \ / \ XXXXXXXXXXXXXXXX 

那么,我很抱歉无法发布图片,因为我没有10点声望。 希望这可以帮助你和其他人!

在我有限的二叉树经验中,我想:

  1. 严格二叉树 :除叶节点以外的每个节点都有两个子节点或只有一个根节点。
  2. 完全二叉树 :H严格(或完全)包含2 ^ H -1个节点的二叉树,很清楚每个级别中哪个节点数最多。
  3. 完整的二叉树 :它是一个二叉树,其中除了最后一个以外的每一个等级都完全被填满,并且所有的节点都尽可能地离开。

完全二叉树是一个二叉树,其中每个节点都有0个或2个孩子。 换句话说,除树叶之外的树中的每个节点恰好有两个孩子。

一个完整的二叉树是一棵二叉树,除了最后一层以外,树的每一层都被完全填满。 另外,在最后一级,应该从最左边的位置开始连接节点。 完整的二叉树必须满足以下条件:

  • 如果a,b是最后一级以上级别的两个节点,那么当且仅当a位于b的左边时,a具有比b更多的子级。
  • 从根节点开始,最后一级以上的级别表示高度为h-1的完整二叉树。
  • 上一级中的一个或多个节点可能有0个或1个孩子。 在这里输入图像说明